最近IE9-betaにアップグレードしました。さて、私の.Net(3.5)WinFormアプリケーションでは、WebBrowser
コントロールを使用します。
私の質問は、WebBrowser
コントロールがIE9のすべてのプロパティと機能を示すかどうかです。
私の懸念は、その上にいくつかのSVGグラフィックスをレンダリングすることです。
IE8バージョンと同様に、WebBrowserコントロールのIE9「バージョン」は、実際には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
WebBrowserコントロールは、インストールしたIEのバージョンを使用しますが、互換性の理由から、デフォルトでIE7標準モードでページをレンダリングします。
IE9の新しい機能を利用する場合は、HTMLページの<meta http-equiv="X-UA-Compatible" content="IE=9" >
タグ内に<head>
メタタグを追加する必要があります。
このメタタグは、<head>
にも含まれるCSS、JavaScriptファイルなどへのリンクの前に追加する必要があります(ただし、他の<meta>
タグまたは<title>
タグのみを前に配置できます) )。
別の方法は、レジストリエントリを次の場所に追加することです。
HKLM>ソフトウェア> Microsoft> Internet Explorer>メイン> FeatureControl> FEATURE_BROWSER_EMULATION
そしてそこに「myApplicationName.exe」と値「9000」を追加して、WebBrowserコントロールにIE9モードでページを表示させます。 他にも使用できる値 もありますが、IE 8モードでレンダリングするページを取得することは不可能と思われるため、これらのドキュメントは完全に正確ではないことに注意してください使用する値。
HKLMの代わりにHKCUの同じパスにレジストリキーを追加しても機能します-HKLMに書き込むには管理者特権が必要ですが、HKCUにはないため、これは便利です。
良かった、これを見つけた。以下は非常に重要です。
<meta http-equiv="X-UA-Compatible" content="IE=9" >
これがなければ、IE8でうまく機能したにもかかわらず、私が生成していたレポートはIE9のインストール後に機能しませんでした。それらはWebブラウザコントロールに適切に表示されますが、.Print()を呼び出すと、文字が欠落したり、空白がジャッキアップされたりします。これらは、Mosaicでもレンダリングできる基本的なHTMLでした。 heh IE7互換モードがなぜうまくいかなかったのかはわかりません。特に、同じページを5回.Print()すると、毎回異なる文字が欠落する可能性があります。 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
である必要があります。名前は実行可能ファイルの名前で、Webbrowserコントロールをホストします。すなわち:
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エミュレーション)。これはデフォルト値ではないためです(IE 11がインストールされている場合-またはその他のバージョン)。
そのMSDNの記事には、Internet ExplorerのWebブラウザーの動作に影響を与える他のいくつかのレジストリの変更に関するメモが含まれています。
私はこのスレッドが古く、すでに包括的な回答があることを知っています。
あなたがこれを知らない場合に備えて:
<meta http-equiv="X-UA-Compatible" content="IE=Edge" >
IEバージョン番号をハードコードする必要はありません。
<meta http-equiv="X-UA-Compatible" content="IE=9" >
私は提供された解決策に完全に同意しますが、少し明確にすることが重要だと思います。
提供された値でDWORDを追加する必要がある各プロセス(vshost.exe、yourWinformApplication.exe.svchost、またはapplication.exeの名前も参照)については、私の場合はアプリケーションに9000(10進数)のままにします名前を付けて、スムーズかつエラーのないスクリプトを実行します。
最も一般的な間違いは、「contoso.exe」AS ISを追加する必要があると信じて、それがすべて機能すると考えることです。
私はこの解決策に来ましたが、うまくいきませんでした! 64ビットを使用していたため、レジストリを交換する必要がありました。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
誰もが話しているものの代わりに:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
はい。WebBrowserコントロールは、インストールしたIEのバージョンを使用します。つまり、IE 8を搭載したマシンでアプリケーションを実行する場合、依存するIE 9機能は利用できません。
アプリのレジストリ設定を設定する以下の(C#)コードが気に入っています。許可が必要な場合でも、インストール後にカットされるかどうかはわかりません。私にとっては、WPFのWebBrowserコントロール内でWebSocketが利用できないという問題を解決しました。
私も同じ問題を抱えていましたが、ここでのレジストリの回答は機能しませんでした。
私のプログラムの新しいバージョンでは、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設定を表示します。