AxWebBrowserに関するTips。 Windows XP上のInternet Explorer 6.0で検証したもの。
IEの戻る・進むボタンの横に付いているシェブロンをクリックすると、今まで閲覧してきたページの一覧が表示されます(「履歴」とは異なります)。 これを実現するためには、セッション履歴を取得します。
各インターフェイス、構造体の宣言は以下の通り。
IEでCtrl+Nを押すと新しいウィンドウが開きます。 これを阻止したい場合には、Ctrl+Nを無視するようにしてやります。 まず、キーイベントを取得するためにIDocHostUIHandlerとIOleClientSiteを実装したクラスを作成し、 IDocHostUIHandler.TranslateAcceleratorメソッドでWM_KEYDOWNを受信します。
この方法を使えば、Ctrl+N以外のショートカット(例えばCtrl+Pの「印刷」など)も無効にすることが出来ます。
インターフェイスの定義などは以下のとおり。
IDocHostUIHandler.GetHostInfoにてDOCHOSTUIFLAG_THEMEフラグを立ててやればテーマが適用されるようになります。 また、DOCHOSTUIFLAG_NO3DBORDERフラグを立ててやればコントロールの枠線を消すことが出来ます。
IDocHostUIHandlerの実装は先に紹介した通り。
AxWebBrowser.ExecWBメソッドを利用してフォントサイズを変更できます。 指定できるフォントサイズは
- 4
- 最大
- 3
- 大
- 2
- 中
- 1
- 小
- 0
- 最小
です。
保存や印刷、切り取り・貼り付けといった基本的な機能はAxWebBrowser.ExecWBメソッドで簡単に実行出来ます。 また、その機能がサポートされているか・現在使える状態にあるかといった情報はQueryStatusWBメソッドで調べることが出来ます。
これらのメソッドで有効なコマンドはOLECMDID(MSDN OLECMDID Enumeration)として定義されています。
ActiveXコントロールの実行を許可したり拒否したりするにはDISPID_AMBIENT_DLCONTROLアンビエントプロパティを実装し、フラグを設定することで可能になります。 このプロパティで、画像・映像のダウンロード許可、ActiveXコントロールのインストール許可なども設定できます。 設定可能な項目は、Web Development, Download Controlを参照してください。
なお、アンビエントプロパティはナビゲーションの度にデフォルト値に戻されるので、BeforeNavigate2でOnAmbientPropertyChangedを呼ぶようにします。
IHTMLDocument2を使ったHTML文書のスキャンのサンプルとして、WebBrowserコントロールで読み込んだHTML文書からフィードのURLを探し出す方法を取り上げます。 このメソッドでは、WebBrowserのDocumentを受け取った上で、
- HTML文書中の全ての要素からHTMLLinkElementClassを探す
- その中で、ref属性が「alternate」、type属性が次に示すもののいずれかのものを探す
- type属性が「application/rss+xml」、「application/rdf+xml」、「application/atom+xml」のいずれかなら無条件でRSSへのリンクと見なす
- type属性が「application/xml」の場合は、さらにtitle属性が「RSS」の場合に限ってRSSへのリンクと見なす
- RSSへのリンクと見なされたタグのhref属性からRSSのURLを取得する
- URLが相対アドレスなら絶対アドレスに直す
と言うことを行っています。 不完全ではありますが、ある程度のサイトでフィードのURLを取得できると思います。