QA@IT

C# WindowsフォームやWPFにあるWebBrowserコントロールのJavaScriptについて

12410 PV

WebBrowserコントロールでVersionプロパティを見てみると10.0.9200.16688となっておりインストールされているIEと同じことを確認したのですが、実行してみると「DataViewは定義されていません」とか「オブジェクトは 'addEventListener' プロパティまたはメソッドをサポートしていません。」などJavaScriptのエラーが発生します。
WebBrowser内で使用されているJavaScriptエンジンはIEのJavaScriptエンジンとは違うのでしょうか?または、何か設定すればIEのJavaScriptエンジンが使用できるのでしょうか?

回答

以下のmsdnに記載があります。

http://msdn.microsoft.com/ja-jp/library/ee330730%28VS.85%29.aspx#browser_emulation

7000 (0x1B58) Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control .

http://msdn.microsoft.com/ja-jp/library/cc288325(v=vs.85).aspx

既定では、 WebBrowser コントロール をホストするアプリケーションは、ページに適切な X-UA-Compatible ヘッダーが含まれている場合以外、標準ベースのページを IE7 モードで開きます。 この設定を変更するには、機能コントロール キー FEATURE_BROWSER_EMULATION にアプリケーションの実行可能ファイルの名前を追加し、必要に応じた値を設定します。

機能コントロール キーじゃなくてFeatureControlキーですね

で、これをコードでやってくれるであろうものが Stack Overflowにありましたので
リンクを貼っておきます。

http://stackoverflow.com/questions/17922308/use-latest-version-of-ie-in-webbrowser-control
上の元ネタ
http://o2platform.wordpress.com/2012/04/17/set-net-webbrowser-control-to-use-latest-version-of-ie/

私は試していませんのでご確認の上お使いください。ざっと見た限りレジストリいじっていますが、アプリケーション名を登録しているだけですので特に問題はないでしょう。
さらにUACも不要とコメントに書いてありますし重大な変更という事もないと思います。問題があれば消せばいいだけでしょうね。
IE 10にあたる値は最初のmsdnのリンクから確認してください。

exeのファイルがころころ変わる場合もいつの間にかレジストリにいろいろ足されてしまってるかもしれませんのでお気を付けを。

編集 履歴 (0)

返答有難うございます。
参考ページまで載せて下さり、お陰でWebBrowserコントロールのバージョンを上げることが出来、JavaScriptのエラーが発生しなくなりました!

ですがちょっとハマったのでハマったところを書きます。
下記のコードを実行してもエラーが発生しませんが、regeditで見てみるとFeatureControl配下のFEATURE_BROWSER_EMULATIONキーに値が追加されません。
ですがWebBrowserコントロールのバージョンは確かに上がりました。

var IEVAlue = 10001; // can be: 10001, 10000, 9999, 9000, 8888, 8000, 7000
Registry.SetValue(
@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION", 
Process.GetCurrentProcess().ProcessName + ".exe", 
IEVAlue, 
RegistryValueKind.DWord
);

そこで、ググって見ると以下のページを見つけました。
http://www.west-wind.com/weblog/posts/2011/May/21/Web-Browser-Control-Specifying-the-IE-Version
私のマシンは64bitで、64bitはWow6432Node配下のキーを見るようです。
実際に見てみるとアプリケーション名が登録されていました。実際に一旦アプリケーション名のキーを削除し、上記のコードを実行してみると確かにWow6432Node配下のキーに追加されました。64bitは自動的にキー名を変更して登録するようです。

編集 履歴 (1)
  • OSではなくて動いてるアプリケーションが32bitか64bitかによると思います。WebBrowserコントロールが64bitで動くかはわかりませんが。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。