独自のアプリケーションに組み込んだWebBrowserコントロールでTrixieを使いたい

IETabでTrixieが使いたい

Firefoxのタブ内にIE(実態はWebBrowserコントロール)を組み込むことができるアドオンIETabでTrixieが使いたくて、いろいろ調べている。

BHOはIObjectWithSiteをインプリメントしたCOMオブジェクトであることから、自前でTrixie.BhoをCreateObjec()して、SetSite()でWebBrowserオブジェクトのインスタンスの参照を渡してあげればなんとかなるんじゃないかと思い試してみた。

で、書いてみたのが以下のVB6のコード

Private Sub Form_Load()
    Set m_bho = CreateObject("Trixie.Bho")
    Call m_bho.SetSite(WebBrowser1)

    WebBrowser1.Navigate2 "http://www.google.com/"
End S

FormにはWebBrowserコントロールを1個配置してて、Form読み込みと同時にGoogleのページを開くようにしている

Googleページにアクセスしたときに実行される(予定の)UserScriptは以下のとおり

(function(){
alert("Hello,Trixie!");
})();

単純に"Hello,Trixie!"のアラートを表示するだけの単純なスクリプト

上記VB6プロジェクトを適当な名前で保存して実行してみたが、、、ダメ、スクリプトは実行されなかった。
Trixieのソースが手元に無いので、もうあきらめ気味だったが...

Trixieのソースを解析してみた

Trixieのソースは公には公開されてないが、Reflector for .NET というツールを使うとアセンブリからソースを逆コンパイルできることを知り、ソースを解析してみた。

Trixie.BhoのSetSite()の実装を読んでみたところ、どうやらアプリケーションの実行ファイルの名前が"IEXPLORE.EXE"で終わる名前でなければ処理を行わないようになっている。
逆に言うと、実行ファイルの名前が、IEXPLORE.EXE"で終わる名前であればTrixieが使えるっぽい。

試してみた

前述のVB6プロジェクトの実行ファイルの名前を"DummyIEXPLORE.EXE"にして実行ファイルを生成、それを実行してみた。

できたー

でも、実行ファイル名をいちいち変えないと動かないってのが、いまいちかっこ悪い。
継承がサポートされていないVB6だと難しいけど、C++とかC#とかであれば、IWebBrowser2インターフェースのFullNameプロパティをアプリケーション側でオーバーライドしてあげればなんとかなりそうだな...

もう少しな気がする....