最近、IE9ベータ版にアップグレードしました。ここで、.Net(3.5)WinFormアプリケーションでWebBrowser
コントロールを使用したいと思います。
だから私の質問は、WebBrowser
コントロールがIE9のすべてのプロパティと機能を示すかどうかです。
私の懸念は、SVGグラフィックをレンダリングしたいということです。
回答:
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
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
と64ビットHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
。
WebBrowserコントロールは、インストールされているIEのバージョンを使用しますが、互換性の理由から、デフォルトでIE7標準モードでページをレンダリングします。
IE9の新機能を利用したい場合は、HTMLページのタグ<meta http-equiv="X-UA-Compatible" content="IE=9" >
内にメタタグを追加する必要が<head>
あります。
このメタタグは、CSS、JavaScriptファイルなどへのリンクの前に追加する必要がありますが、これらも<head>
正しく機能します(他の<meta>
タグまたはタグのみがその<title>
前に来ることができます)。
別の方法は、レジストリエントリを次の場所に追加することです。
HKLM>ソフトウェア> Microsoft> InternetExplorer>メイン> FeatureControl> FEATURE_BROWSER_EMULATION
そして、そこに値「9000」の「myApplicationName.exe」を追加して、WebBrowserコントロールにIE9モードでページを表示させるようにします。使用できる値は他にもありますが、どの値を使用してもIE 8モードでページをレンダリングすることはできないため、これらのドキュメントは完全に正確ではないことに注意してください。
HKLMの代わりにHKCUの同じパスにレジストリキーを追加することもできます。これは、HKLMへの書き込みには管理者権限が必要ですが、HKCUでは必要ないため便利です。
私がこれを見つけた良さに感謝します。以下は非常に重要です。
<meta http-equiv="X-UA-Compatible" content="IE=9" >
これがないと、IE8でうまく機能したにもかかわらず、私が生成していたレポートはIE9のインストール後に機能しませんでした。これらはWebブラウザコントロールに正しく表示されますが、.Print()を呼び出すと、文字が欠落したり、空白がジャッキアップしたりします。これらは、Mosaicでもレンダリングできる基本的なHTMLでした。なぜIE7互換モードがうまくいかなかったのかわからない。特に、同じページを5回.Print()すると、毎回異なる文字が欠落する可能性があります。PDF出力にも引き継がれるので、間違いなくブラウザです。
完全にするために...
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
1100110進数または0x2AF9hex ---(IE 11 EMULATION)に変更しました。これは、デフォルト値ではないためです(IE 11がインストールされている場合-またはその他のバージョン)。
そのMSDNの記事には、Internet ExplorerWebブラウザーの動作に影響を与える他のいくつかのレジストリの変更に関するメモが含まれています。
私はこのスレッドが古く、すでに包括的な答えがあることを知っています。
あなたがこれを知らない場合に備えて:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
IEのバージョン番号を次のようにハードコーディングする必要はありません
<meta http-equiv="X-UA-Compatible" content="IE=9" >
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
のヘッダーにが含まれている場合、webBrowserは最新のIEモードで読み込まれます。mikelの回答に90以上の賛成票があるのはなぜですか?彼の解決策が機能するからです。Webページを変更できる場合は、レジストリを変更する必要はありません。
私は提供された解決策に完全に同意しますが、少し説明することが重要だと思います。必要かもしれません。
提供された値でDWORDを追加する必要がある各プロセス(vshost.exe、yourWinformApplication.exe.svchost、またはapplication.exeの名前も参照)について、私の場合は9000(10進数)をアプリケーションに残します名前を付けて、スムーズでエラーのないスクリプトを実行します。
最も一般的な間違いは、「contoso.exe」をそのまま追加する必要があると信じて、すべてが機能すると考えることです。
はい、WebBrowserコントロールは、インストールされているIEのバージョンを使用します。これはもちろん、IE 8を搭載したマシンでアプリケーションを実行すると、依存しているIE9の機能が利用できなくなることを意味します。
私はこの解決策に到達しましたが、うまくいきませんでした!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]
アプリのレジストリ設定を設定する次の(C#)コードが気に入りました。権限が必要かどうかはわかりませんが、インストール後にカットされるかどうかはわかりません。私にとっては、WPFのWebBrowserコントロール内でWebSocketを使用できないという問題を解決しました。
私も同じ問題を抱えていましたが、ここでのレジストリの回答は機能しませんでした。
XPで正常に動作し、Windows 7(64ビット)で失敗した新しいバージョンのプログラムでブラウザーコントロールがありました。古いバージョンは、XPとWindows7の両方で動作しました。
ブラウザに表示されるWebページは、古いSVGマップを表示するために奇妙なプラグインを使用しています(Javaアプレットだと思います)。
問題はWindows7のDEP保護に関連していることが判明しました。
古いバージョンのdotnet2はexeにDEPrequiredフラグを設定しませんでしたが、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設定を表示します。ホワイトホークの受け入れられた答えについて。私はちょっとした経験を加えようとしています。コメントを追加しようとしていたのですが、SOは長すぎると文句を言います。
基本的に、IE 9がインストールされていないと、レジストリスイッチFEATURE_BROWSER_EMULATIONはまったく機能しません。
たとえば、今日の私自身の経験では、レンダリングしようとしている1つのHTMLがVS2012では.netControlで機能せず、HTMLをIE8にロードしても機能しないため、.netWebコントロールをIE10モードで機能させようとしていました。直接、それでもcssは正しくレンダリングされません(ブロックされたコンテンツを許可すると言った後でも)。しかし、私は友人のwin8マシンでIE10を使用して同じhtmlをテストしました。そのため、.netwebControlをIE10モードに設定しようとしていますが、失敗し続けます...
これが私のwin7マシンにはIE8しかインストールされていないbcosであることがわかったので、FEATURE_BROWSER_EMULATIONスイッチに設定した値(IE9、IE10 IE11の値)に関係なく、まったく機能しません!
次に、IE10をダウンロードしてWin7マシンにインストールしました。それでも機能しないので、FEATURE_BROWSER_EMULATIONを追加すると、機能し始めました。
また、どの値を設定しても、デフォルトで値0に設定されていても、webControlはまだIE10モードを使用していることに気付きました。
要約すると、IE Xがインストールされているが、.Net webControlをIE(X + N)N> 0 modoで動作させたい場合は、次の2つのことを行う必要があります。
MS Webサイトにアクセスし、IE(X + N)をダウンロードしてマシンにインストールします。インストール後に再起動する必要があります。
ホワイトホークの答えを適用します。
基本的に:レジストリを使用してこの機能の値を制御するには、実行可能ファイルの名前を次の設定に追加し、目的の設定に一致するように値を設定します。
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
SOFTWARE
Microsoft
Internet Explorer
Main
FeatureControl
FEATURE_BROWSER_EMULATION
contoso.exe = (DWORD) 00009000
Windows Internet Explorer8以降。FEATURE_BROWSER_EMULATION機能は、Internet Explorerのデフォルトのエミュレーションモードを定義し、次の値をサポートします。
値の説明
11001(0x2AF9 Internet Explorer 11. Webページは、!DOCTYPEディレクティブに関係なく、IE11エッジモードで表示されます。
11000(0x2AF8)IE11。標準ベースの!DOCTYPEディレクティブを含むWebページは、IE11エッジモードで表示されます。IE11のデフォルト値。
10001(0x2711)Internet Explorer 10. Webページは、!DOCTYPEディレクティブに関係なく、IE10標準モードで表示されます。
10000(0x02710)Internet Explorer 10.標準ベースの!DOCTYPEディレクティブを含むWebページは、IE10標準モードで表示されます。Internet Explorer10のデフォルト値。
9999(0x270F)Windows Internet Explorer 9. Webページは、!DOCTYPEディレクティブに関係なく、IE9標準モードで表示されます。
9000(0x2328)Internet Explorer 9.標準ベースの!DOCTYPEディレクティブを含むWebページは、IE9モードで表示されます。Internet Explorer9のデフォルト値。
重要InternetExplorer 10では、標準ベースの!DOCTYPEディレクティブを含むWebページがIE10標準モードで表示されます。
8888(0x22B8)Webページは、!DOCTYPEディレクティブに関係なく、IE8標準モードで表示されます。
8000(0x1F40)標準ベースの!DOCTYPEディレクティブを含むWebページは、IE8モードで表示されます。Internet Explorer8のデフォルト値重要InternetExplorer 10では、標準ベースの!DOCTYPEディレクティブを含むWebページがIE10標準モードで表示されます。
7000(0x1B58)標準ベースの!DOCTYPEディレクティブを含むWebページは、IE7標準モードで表示されます。WebBrowserコントロールをホストするアプリケーションのデフォルト値。
ここに完全な参照
without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL.
- これは間違っています。私はIE8のみをインストールしており、スイッチを完全に使用してWebブラウザーをさまざまなレンダリングモードにすることができます。