1

以前の JScript エンジン (CLSID_JScript) でしばらくの間、ブラウザー拡張機能 (BHO) でアクティブ スクリプトを使用してきましたが、最近、新しい IE9 スクリプト エンジン (Chakra) も​​サポートすることにしました。私たちが行うことの 1 つは、独自のモジュール (名前空間) を作成するオプションを使用AddNamedItemしてエンジンにシンボルを追加することです。SCRIPTITEM_CODEONLY残念ながら、これを Chakra で動作させることはできませんでした。シンボルを追加してすぐにそのスクリプト ディスパッチを取得する最も単純な例でさえ、E_OUTOFMEMORYエラーが発生します。

if (SUCCEEDED(hr)) {
  hr = scriptEngine->AddNamedItem(L"test", SCRIPTITEM_CODEONLY);
}
if (SUCCEEDED(hr)) {
   hr = scriptEngine->GetScriptDispatch(L"test", &scriptDispatch);
}

GetScriptDispatch呼び出しはエラーを返します。例全体は Github で見ることができます。

すべてのメソッドにブレークポイントを設定しましたが、呼び出されるのはとIActiveScriptSiteだけなので、サイトの実装が問題だとは思わないでください。GetLCIDOnStateChange

私は見つけることができるすべての例を見て、エンジンの状態をSCRIPTSTATE_CONNECTED手動で設定すること、QI対象の追加のインターフェースを実装することなど、考えられるすべてを試しましたLCID。何も違いはないようです。

何が与えられますか?この基本的な例は Chakra で機能すると思います。

4

1 に答える 1

3

残念なことに、Chakra が公開する一連の IActiveScript インターフェイスは、一般に公開されることを意図していません。(まさにその理由で、GUID はレジストリに発行されません。) Chakra は、Internet Explorer と Visual Studio エディター/デバッガーをサポートするために必要な IActiveScript インターフェイスのその部分のみを実装し、完全性または正確性を保証するための努力は行われていません。これらの 2 つのクライアントが使用するインターフェイスを超えて。

おそらくIE/VSがこの特定の方法でインターフェイスを使用していないため、シナリオは仕様に実装されていないものの1つであるようです。残念ながら、IE の将来のバージョンで IActiveScript インターフェイスを公式にサポートする決定がない限り、これが修正される可能性はほとんどありません。

IE11 は Chakra 用のパブリック API を導入しましたが、これは IActiveScript ベースではなく、Win32 ベースです。詳細については、http: //www.panopticoncentral.net/2013/07/02/introducing-jsrt-embedding-javascript-on-windows/を参照してください。それがあなたの状況であなたを助けるかどうかはわかりません.

申し訳ありませんが、あなたが望んでいた答えではありません。きっと...

于 2013-07-10T22:11:37.480 に答える