独自ブラウザ実装メモ
C#.netで独自ブラウザ組んでるんだけど、いろいろメモ
全体像
Windows FormアプリにWebBrowserコントロールを貼るだけ。
でもタブにも対応したいので、TabControlを貼ってWebBrowserコントロールをもつTabPageを都度増やす。
タブのカスタマイズ
CodeProjectのCustomTabControlが手軽に使えて良いと思います。
Painting Your Own Tabs - Second Edition - CodeProject
WebBrowserコントロールのブラウザ変更
デフォルトはIE7です。不安になります。 レジストリで変更可能。アプリ名がKeyで、IEのバージョンがValue。
IEのバージョンは次の値を指定。
Internet Feature Controls (B..C) (Internet Explorer)
新しいタブで開く機能
これ、結構面倒。 WebBrowserコントロールで新しいウインドウ開くときはIEが開く。やめてくれー。
WebBrowserで新しいウインドウを開くイベントをキャッチして、ウインドウを開く処理を奪い取ります。 アクティブなHTMLタグ(aタグ)を特定し、URLを指定して新しいTabPageを開くようにすると同時にIEを開くイベントをキャンセルします。
今回はIFrameにも対応。ページ遷移しないWebアプリではIFrameを使うことも多い(と思っている)ので。 Document.ActiveElementを取得しても、IFrameの中身のどのタグがアクティブかまではわからず、もう一手間必要。 Document.Window.Framesからフレームを指定して、内部のActiveElementを見ればよい。
今回作りきれてない部分
javascriptのwindow.openとか使ったとき。
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
で、COM扱えるようにして、public void MethodA()をC#で実装したら、
javascript側でwindow.external.MethodA()
みたいに呼び出してあげればよい。
できればC#のメソッドを呼び出すためのjavascriptはブラウザ側から注入してあげるのが良い。
まとめ
こんな感じ。