最近、IE9ベータ版にアップグレードしました。ここで、.Net(3.5)WinFormアプリケーションでコントロールを使用したいと思いますWebBrowser
。
だから私の質問は、WebBrowser
コントロールがIE9のすべてのプロパティと機能を発揮するかどうかです。
私の懸念は、SVGグラフィックをレンダリングしたいということです。
最近、IE9ベータ版にアップグレードしました。ここで、.Net(3.5)WinFormアプリケーションでコントロールを使用したいと思いますWebBrowser
。
だから私の質問は、WebBrowser
コントロールがIE9のすべてのプロパティと機能を発揮するかどうかです。
私の懸念は、SVGグラフィックをレンダリングしたいということです。
WebBrowser コントロールは、インストールされている IE のどのバージョンも使用しますが、互換性の理由から、既定では IE7 標準モードでページをレンダリングします。
IE9 の新機能を利用したい場合は、HTML ページの タグ<meta http-equiv="X-UA-Compatible" content="IE=9" >
内にメタ タグを追加する必要があります。<head>
このメタ タグは、適切に機能するために、CSS や JavaScript ファイルなどへのリンクの前に追加する必要があります<head>
(他の<meta>
タグまたは タグのみ<title>
を前に置くことができます)。
別の方法として、次の場所にレジストリ エントリを追加します。
HKLM > ソフトウェア > Microsoft > Internet Explorer > メイン > FeatureControl > FEATURE_BROWSER_EMULATION
そこに値 '9000' を持つ 'myApplicationName.exe' を追加して、WebBrowser コントロールが IE9 モードでページを表示するように強制します。使用できる値は他にもありますが、これらのドキュメントは完全に正確ではないことに注意してください。どのような値を使用しても、IE 8 モードでレンダリングするページを取得することはできないようです。
HKLM の代わりに HKCU の同じパスにレジストリ キーを追加することもできます。HKLM への書き込みには管理者権限が必要ですが、HKCU には必要ありません。
WebBrowserコントロールのIE9「バージョン」は、IE8バージョンと同様に、実際には1つに複数のブラウザーがあります。IE8バージョンとは異なり、Doctypeを変更することで、ページ内のレンダリングモードをもう少し制御できます。もちろん、ブラウザモードを変更するには、前の回答のようにレジストリを設定する必要があります。FEATURE_BROWSER_EMULATIONのregファイルフラグメントは次のとおりです。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"contoso.exe"=dword:00002328
コードの完全なセットは次のとおりです。
完全なドキュメント:
http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation
これを見つけてくれてありがとう。以下は非常に重要です。
<meta http-equiv="X-UA-Compatible" content="IE=9" >
これがなければ、私が生成していたレポートはどれも、IE8 でうまく機能していたにもかかわらず、IE9 のインストール後に機能しませんでした。それらは Web ブラウザー コントロールに適切に表示されますが、.Print() を呼び出すと、文字が欠落したり、空白が増えたりします。それらは、Mosaic でもレンダリングできる基本的な HTML にすぎません。Heh IE7 互換モードがなぜうまくいかなかったのかわかりません。特に、同じページを .Print() で 5 回実行すると、毎回異なる文字が欠落する可能性があります。PDF出力にも引き継がれるので、間違いなくブラウザです。
何人かの人々をつまずかせているように見える64ビットWindowsについてのメモ。アプリが 64 ビット Windows で実行されている場合は、代わりに [HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION] の下に DWORD を設定する必要があります。
完全にするだけで...
32 ビット OS の場合、レジストリ エントリを次の場所に追加する必要があります。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
*******また*******
64 ビット OS の場合、レジストリ エントリを次の場所に追加する必要があります。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
このエントリはDWORD
、名前が実行可能ファイルの名前で、Web ブラウザー コントロールをホストする である必要があります。すなわち:
myappname.exe (MSDN Web ページのように "Contoso.exe" を使用しないでください...これは単なるプレースホルダー名です)
次にDWORD
、次の表に従って値を指定します。
http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation
10 進数の 11001 または 16 進数の 0x2AF9 --- (IE 11 エミュレーション) に変更しました。
この MSDN の記事には、Internet Explorer の Web ブラウザーの動作に影響を与える他のいくつかのレジストリの変更に関するメモが含まれています。
提供された解決策に完全に同意しますが、少し明確にすることが重要だと思います。必要かもしれません。
提供された値でDWORDを追加する必要がある各プロセス(vshost.exe、yourWinformApplication.exe.svchost、またはapplication.exeの名前も参照)について、私の場合、アプリケーションに9000(10進数)を残します名前と実行がスムーズでエラーのないスクリプトです。
最も一般的な間違いは、「contoso.exe」をそのまま追加する必要があり、すべてが機能すると考えることです。
はい、WebBrowserコントロールは、インストールしたIEのバージョンを使用します。これはもちろん、IE 8を搭載したマシンでアプリケーションを実行すると、依存しているIE9の機能が利用できなくなることを意味します。
私は同じ問題を抱えていましたが、ここでのレジストリの回答は機能しませんでした。
私のプログラムの新しいバージョンには、XP では正常に動作し、Windows 7 (64 ビット) では失敗したブラウザー コントロールがありました。古いバージョンは、XP と Windows 7 の両方で動作しました。
ブラウザーに表示される Web ページは、古い SVG マップを表示するために奇妙なプラグインを使用しています (Java アプレットだと思います)。
この問題は、Windows 7 の DEP 保護に関連していることが判明しました。
古いバージョンの dotnet 2 では、exe に DEP 必須フラグが設定されていませんでしたが、dotnet 2 SP 1 以降では設定されていました (そうです、コンパイルの動作と exe の実行時の動作は、コンパイルしたマシンに応じて変わりました。 ..)。
これは、MSDN ブログNXCOMPAT および C# コンパイラ に記載されています。引用:これは間違いなく一部の開発者を驚かせるでしょう...フレームワーク サービス パックをダウンロードし、再コンパイルしてアプリを実行すると、IP_ON_HEAP 例外が発生します。
Visual Studio のポスト ビルドに次を追加すると、exe の DEP がオフになり、すべてが期待どおりに機能します。
all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"
/headers
は、exe の DEP 設定を表示します。