nsIWebBrowserのガワの話。 要するにnsIWebBrowserChromeの実装の話。 とりあえず触りだけ。
最低限以下のインターフェースの実装が必要なようだ。
nsIWebBrowserChromeガワ本体。ガワなのに本体とはどういうことかと思うが
nsIWebBrowser.containerWindowがnsIWebBrowserChrome型なので仕方ない。nsIInterfaceRequestor今ひとつどう説明すればわからないインターフェース。
queryInterfaceによく似たメソッドgetInterfaceを持つ。getInterfaceで取得したインターフェースは逆変換できる必要はない。queryInterfaceではあくまで自分自身を返すが、getInterfaceではプロパティや関数の戻り値を返してもいいことになる。 Mozillaのソースを深く読んではいないのでどう便利なのかはいまいちわからないが、nsIWebBrowserのガワとしては必須。
とりあえず上の2つのインターフェースのメンバのうち、
nsIInterfaceRequestor.getInterfaceメソッドを
queryInterfaceに丸投げして
nsIWebBrowserChrome.webBrowserプロパティを実装すれば
残りのメソッドは全部NS_ERROR_NOT_IMPLEMENTEDにしても動く。
getInterfaceを実装しないとFlashもまともに表示されないしリンクも飛べない。
でもgetInterfaceさえ実装すれば動く。
それくらい重要。
はっきり言ってGecko Embedding BasicsにnsIInterfaceRequestorがないのは詐欺だろ。

コメントする