.NETアプリでWebBroserコントロールを貼っつけたらInternet Explorerコンポーネントが貼り付けられます。
ところで、このIEコンポーネント、どんなIEなんでしょうか。
「そんなんマシンに入ってるIEと同じに決まってんやろ」という人は鴨川デルタで磔にされますよ。
WebBroswerコントロールで動くIEはバージョン7です。
ほんまかいな、という人のためにAcid2テスト*1をしてみましょう。
見事に失敗してますね。
In order to ensure that these existing applications remain in working order, IE8 renders pages running within instances of the WebBrowser control in IE7 Standards Mode by default.
WebBrowser Control Rendering Modes in IE8 - IEBlog - Site Home - MSDN Blogs
既存のアプリケーションが困らないようにこうしたんだって。
WebBroswerコントロールでIE7以外を使うには
それはそれとして、IE11が入ってるマシンでIE7のレンダリングなんかしてるとW3C原理主義者に血祭りにあげられてしまいます。
血祭りにならないためにはどうすればいいか。
レンダリングするhtml内metaタグでX-UA-Compatibleに要求するIEバージョン書く手段もあります*2が、今回はUA側の話をします。
cf. ドキュメント互換性の定義 META タグと将来の互換性のロック
レジストリをいじって、EXEファイル名毎にIEバージョンの指定ができます。
要するに
- HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATIONに設定開く
- プログラムファイル名を名前に持つDWORDキーを作って要求するIEバージョンの数字入れる
ということで。IEはDOCTYPE有無によって描画時の挙動が変わりますが、それも制御出来る様子。
いじくるレジストリはHKCU*3だけでなくHKLM*4でもいいんですが、HKLMだとWOW64仮想化がかかるしUACアクセス制御食らうので、HKCUのほうがいいんじゃないでしょうか。
しかし、なんでプログラムファイル名やねん感があふれる。IWebBrowserで制御したいよー。
ちなみにInternet Explorerはv9からGPU支援が実装されましたが、これもレジストリに書かないと有効になりません。
IE9以降が入ってるマシンで、レジストリにIE8あたりを設定してGPUレンダリング有効にしてFishIETank走らせると、GPU使用率が揺れるのでどうもGPU使ってるように見えますが確証なし。