- PR -

IEのスクリプトエンジンへのインターフェイス

1
投稿者投稿内容
hogera
会議室デビュー日: 2002/06/06
投稿数: 3
投稿日時: 2002-06-06 09:41
初めて書き込みします。宜しくお願いします。:D

Internet Explorer が内部で保持している(はず)の Active Script エンジンへのインターフェイス(IActiveScript)を取得する方法を探しています。
Browser Helper Objects を実装してそこからスクリプトエンジンにアクセスしたいのですが、このような手段は無いのでしょうか?

どなたかご存知の方はいませんか?
社本@ワック
会議室デビュー日: 2002/06/07
投稿数: 4
投稿日時: 2002-06-07 02:28
IObjectWithSite::SetSite()でセットされたサイトから、
IServiceProvider経由で取得するんじゃないかと思います。
そこで指定するサービスIDは、SID_GetScriptSiteかなあ?
#最新のPlatform SDK付属のDispEx.hに定義されています。

確認はしてませんので、悪しからず。。
hogera
会議室デビュー日: 2002/06/06
投稿数: 3
投稿日時: 2002-06-07 14:40
返事ありがとうございます。

IServiceProviderって何?ってことで調べてました。
MSDN Magazine J 2001/07 P127-128 に同じような要旨で記事が載っていました。
BHO の場合、IE が IObjectWithSite::SetSite() を通じてインターフェイスをセットしてくるので、これから ISerivceProvider を取得し、ISerivceProvider::QueryService で IActiveScript を取得すれば?ということで理解しました。

が、実際にテストしてみると、IServiceProvider は取得できるものの、IActiveScript は取得できませんでした。SID_ActiveScriptSite の他に、IID_IActiveScript も試してみましたが両方とも E_FAIL(そりゃ無いでしょう が返されます。

うーん、惜しい気がするんだけどなぁ。
引き続き情報を待っています。宜しくお願いします。
社本@ワック
会議室デビュー日: 2002/06/07
投稿数: 4
投稿日時: 2002-06-07 18:01
>SID_ActiveScriptSite の他に、IID_IActiveScript も試してみましたが

ExDiap.hによると、その2つは同じIIDを指しています。
#define SID_GetScriptSite IID_IActiveScriptSite

細かい話ですが、IHTMLDocument(or IHTMLWindow)を持ったオブジェクトが
ActiveScriptエンジンをホストしてるんじゃないかなあと思ってます。
うーん、どうやって、取ったらいいんでしょうね。
hogera
会議室デビュー日: 2002/06/06
投稿数: 3
投稿日時: 2002-06-07 18:12
SID_ActiveScriptSite は IID_IActiveScriptSite へのエイリアスというのはヘッダファイルを見て確認していました。実際に試したのは IID_IActiveScript の方です(でも駄目でした)。

ちなみに IActiveScriptSite はスクリプトエンジンを「使う」側が差し出すインターフェイスのようです(MSDN ライブラリで確認)。図によるとエンジンが何らかの問い合わせをしたいときにこのインターフェイスを経由してくるもののようです(コネクションポイントのような使われ方なのかな?)。

で、私もドキュメントオブジェクトからならいけるかもと思い、IServiceProvider 経由で IWebBrowser2 を取得して get_Document() を呼び出して単純に QueryInterface() したのですが、やっぱり駄目でした (;_;)
うーん、どうなってるのか...
1

スキルアップ/キャリアアップ(JOB@IT)