問題タブ [active-script]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-flex - Flexでの基本認証のためにクライアント側でクレデンシャルを変更する
基本認証を使用するFlexアプリにユーザーが自動的に再ログインできるようにしたい
ちなみに、私はこのStackOverflowの質問に注目しました。これは関連性がありますが、クライアント側のログアウトの質問には対応していません。
たとえば、ユーザーAがログインした後、ユーザーBはブラウザーにアクセスし、ログイン画面(おそらく新しいタブ)に移動してログインします。
これは、HTTPヘッダーでユーザーBの資格情報を送信し、これらはユーザーAの資格情報とは異なるため、サーバーが事実を記録し、新しい別個のセッションを作成することを意味するはずです。
ただし、FlexのHTTPプロキシはヘッダーをキャッチし、実際にはこれらの新しい資格情報を無視します。
Flexはサーバーにログアウトするように指示する方法を提供し、Flexログインコードは資格情報を送信する前に毎回これを呼び出すことができますが、それは醜い回避策のようです。このクライアントサイドでできるようになりたいです。基本認証に非標準のヘッダーを使用することもできますが(サーバー側の認証も制御するため)、それも醜い回避策のようです。
Flexコードからクライアント側でセッションを単純に終了する方法はありますか?これは、たとえばJavaScriptから可能です。
また、JavaScriptでできるように、クライアント側でCookieを直接操作する方法はありますか?
いくつかの制限はセキュリティ上の考慮事項によって引き起こされる可能性があることを理解していますが、私の通信はすべて「ホーム」サーバーに対して行われるため、制限を回避できるはずです。
code-analysis - FDTおよびantでのApparatダンプの使用
私はフラッシュ開発にまったく慣れていません。ActiveScriptについてもまだ知りません。既存のフラッシュアプリケーションを改善する必要があるため、最初にコードを理解する必要があります。コード分析用のツール、つまりクラスの依存関係とコード構造を視覚化するためのツールを使用したいと思います。私はグーグルでアパラットツールについて知りました。Apparatの使用方法を説明するドキュメントが見つからないため、今は苦労しています。欲求不満ですが、そのようなツールはそれだけのようです。
それで私は例から始めました。
このガイドに従って、FDTで実行するアパラットを設定しました。http://www.webdevotion.be/blog/2010/06/02/how-to-get-up-and-running-with-apparat/ 例( http://blog.joa-ebert.com/2010/05/26/new-apparat-example/)は適切にビルドされ、2つのSWFファイルを作成します。(私はANTビルダーを使用しています)
次に、既存のswfを分析して、クラスに依存するPNGを確認します。どうすればいいですか?何をどこに追加する必要がありますか?
または、誰かがWindowsコマンドラインからダンプを使用する方法を説明できますか?何かのようなもの
javascript - サーバーサイドイベントハンドラーでJavaScriptをアクティブ化するためのプロンプト
ユーザーのPCでJavaScriptがオフになっている場合に、サーバーサイドイベントハンドラーでJavaScriptをアクティブ化するようにユーザーに促す方法はありますか?ポップアップウィンドウまたは指定されたDIVでボタン(フォームを送信する)を押すように求められます。 JavaScriptをアクティブ化するために?
windows - アウト プロセス COM サーバーが動かなくなった
プロセス外の COM サーバー (DECLARE_CLASSFACTORY_SINGLETON を使用して実装された COM シングルトン「エンジン」) を使用しています。これは STA (CComSingleThreadModel、_ATL_APARTMENT_THREADED) で動作します。
COM サーバー クライアント:
- ActiveScript (JScript) (AddNamedItem を使用してエンジン参照を渡します)。
- 2 つの独立した IE BHO。
BHO は定期的に Engine::dispatchEvent を呼び出し、エンジンは ActiveScript の JavaScript 関数を呼び出します。このアーキテクチャは、2 つの BHO を同時にオンにするまでは完全に機能していました。
2 つの BHO をオンにすると、ActiveScript の関数を (IDispatch/Invoke を使用して) 呼び出すとスタックが発生します。追加のスレッドは作成しません。
いくつかのメモ:
- BHO から取得したオブジェクトを ActiveScript に渡さない (またはエンジンで作成された同じオブジェクトに置き換える) と、すべて正常に動作します。
- スタックは、JScript ガベージ コレクターが BHO から取得したオブジェクトを解放しようとした場合にのみ発生します (コールスタックの IUnknown_Release_Proxy)。
コールスタック:
実装の詳細:
multithreading - ブレークポイントで中断されたデバッガー内にブレークポイントを設定する方法
VBScript ホスト用のデバッガーを作成しています。私のデバッガは外部アプリケーションです。すべて順調。IApplicationDebugger::onHandleBreakPoint ハンドラーへの呼び出しを受け取ります。IDebugApplication::ResumeFromBreakPoint を呼び出すことができ、コードをステップ実行できます。
また、スクリプトを実行する前にブレークポイントを設定することもできます。再び IApplicationDebugger::onHandleBreakPoint が呼び出されます。エラーも処理されます。しかし、IApplicationDebugger::onHandleBreakPoint で中断している間に、新しいブレークポイントを設定したいと考えています。
IActiveScriptDebug へのマーシャリングされたポインターがあります。しかし、IActiveScriptDebug::EnumCodeContextsOfPosition を呼び出すと、アプリケーションがブロックされます。これは私にとって論理的な縫い目です。IActiveScript (IActiveScriptDebug) オブジェクトを含むスレッドは別の STA に存在し、記載されているようにデバッガーでブロックされたままです。
しかし、デバッガ スレッドから言語エンジンにアクセスする正しい方法は何ですか。必要なのは、特定のコード行の IDebugCodeContext または IEnumDebugCodeContexts インターフェイスだけです。同じ機能を実現するためにアクセスできる別のインターフェイスがありませんか。
com - IDispatch インターフェイスを実装していない COM オブジェクトのディスパッチを追加するにはどうすればよいですか?
CUIAutomation
COM クラス オブジェクトのメソッドを、アクティブ/Windows スクリプト アプリケーションを介して読み込んで実行するスクリプトに公開したいと考えています (スクリプト エンジンを実装していません。具体的には「JScript」エンジンを使用しています)。IDispatch
スクリプト ホストは通常、 を実装するオブジェクトを自動的に公開できますが、CUIAutomation
クラスは を実装しませんIDispatch
。QueryInterface
オブジェクトへのIDispatch
ポインターを呼び出すには、 を返しE_NOINTERFACE
ます。
以下で詳しく説明する私の質問全体は、基本的にこれに要約されます。実装されていないオブジェクトのディスパッチを実装することは可能IDispatch
ですか? 可能であれば、オブジェクトのコクラスの型情報を持つことは、必要な (そしておそらく十分な) 要件であるに違いありません。可能であれば、以下で説明するように、そうしようとして何が問題になっていますか? 私の代替手段は何ですか?
ITypeInfo
前述のように、私の解決策は、コクラスの型情報 ( ) を取得する必要がある場合CUIAutomation
、理論的には、コクラスのオブジェクトを実装しなくても、 likeおよびIDispatch
のメソッドを介してランタイム ディスパッチを実行できるはずであるという私の仮説を中心にしています。実際には、 を実装し、オブジェクト (または適切な型情報と組み合わせることができるもの) をラップし、メンバーのディスパッチをラップされたオブジェクトに委任する独自のクラスを設計します。ITypeInfo
GetIDsOfNames
Invoke
IDispatch
CUIAutomation
IUnknown
それを実装するモジュールへのパスを見つけ、次の手順を使用することで、少なくともCUIAutomation
コクラスの型情報を読み込むことに成功しました。これはすべて Windows レジストリにあります。LoadTypeLib
(注:呼び出しが成功したかどうかをチェックするアサーションがあります(S_OK
またはERROR_SUCCESS
などと比較することにより-成功のコードに依存します)が、簡潔にするために、スニペットでのエラーチェックを省略します-呼び出しが戻りをチェックしない場合説明されているように、値の周りには常にアサーションがあります)
委任DispatchProxy
クラスは次のように設計されています。
これに関連して、スクリプトがオブジェクトCUIAutomation
(スクリプト) でメソッドを呼び出す前に、クラスのオブジェクトのようなオブジェクトへの参照を取得する方法が必要です。VBScript の関数や当時の Internet ExplorerのようcreateObject
に、「グローバル」実装オブジェクトでメソッドを公開することにより、スクリプトが指定された CLSID の COM オブジェクトを作成できるようにします。指定された CLSID で識別される COM クラスのオブジェクトを作成するために使用します。IDispatch
CreateObject
new ActiveXObject(progID)
CoCreateInstance
スクリプトはCUIAutomation
オブジェクトを作成し、次のように新しいDispatchProxy
ラッピングへの参照を取得できます。
GetRootElement
その後、オブジェクトのメソッド (ここでは ) を呼び出すことができるはずです。
残念ながら、pTypeInfo->Invoke
すべての中心にある呼び出しが返されますE_NOTIMPL
。それが当面の課題です。
実装されていないものとその理由は? メンバー ID ( dispIdMember
) は前に書いたものと一致しpTypeInfo->GetIDsOfNames
、後者は を返すS_OK
ので、少なくともそれによると、メンバー ID は有効です。パラメータの形式もそれとは何の関係もないと思います-pTypeInfo->Invoke
もしそうなら、呼び出しから別のエラーコードが予想されます。
write as type information count を作成し、結果として書き込みをGetTypeInfoCount
行っても、後続の呼び出しの結果には影響しません。それでも失敗します。1
pTypeInfo
GetTypeInfo
ITypeInfo::Invoke
また、コクラス自体の情報ではなく、元のコクラスオブジェクトで取得した実際のIUIAutomation
インターフェイスの型情報 (pTypeInfoDefaultInterface
以下のスニペット) を使用してみました。 ITypeInfo
ITypeInfo::Invoke
インターフェイスまたはコクラスの型情報が使用されているかどうかに関係なく、効果は同じです -- をITypeInfo::Invoke
返しますE_NOTIMPL
。
私は何を間違っていますか?COM やディスパッチに関する重要な情報を見逃していませんか? また、どのような型情報が役立ちますか? 私は IDL ファイルを作成しません。これDispatchProxy
は COM サーバーの一部ではなく、アプリケーションの厳密な内部クラスです。Visual C++ で確認できる仮想関数テーブルを確認し、型情報についても調査を行いGetFuncDesc
ました。入力内容はしっかりしているように見えます。名前とパラメーターの型と数がすべて揃っています。私が呼び出そうとしているすべての予想されるメソッド。ポインターは有効で、使用可能です。
少なくともGetRootElement
、オブジェクトへのポインターへのポインターを期待し、そのようなタイプのパラメーターを渡すことさえできないスクリプトからそのようなメソッドをディスパッチすることが原因である可能性があることを認めます。しかし、ドキュメントによると、ITypeInfo::Invoke
おそらくE_INVALIDARG
orDISP_E_EXCEPTION
を返す必要があります。
私も をCreateStdDispatch
いじってみましたが、2 つのことが気になりました。CreateStdDispatch
次に、どこからどのディスパッチが行われ、どのポインターがどの引数として使用されるのか正確にはわかりません。ここでの慣用的な代替案でない限り、それは私の実際の質問ではないと思いますが、それが私の場合に役立つ場合は、それが正確に何をし、どのようにプラグインするかについての説明を得るためです.