読者です 読者をやめる 読者になる 読者になる

blog.toxn

あしあと

独自ブラウザ実装メモ

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はブラウザ側から注入してあげるのが良い。

まとめ

こんな感じ。

gist7352a2294cf96b4d14e6