IE9 WebBrowser Controlは、SVGを含むIE9のすべての機能をサポートしますか?


84

最近、IE9ベータ版にアップグレードしました。ここで、.Net(3.5)WinFormアプリケーションでWebBrowserコントロールを使用したいと思います。

だから私の質問は、WebBrowserコントロールがIE9のすべてのプロパティと機能を示すかどうかです。

私の懸念は、SVGグラフィックをレンダリングしたいということです。

回答:


82

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

コードの完全なセットは次のとおりです。

  • 9999(0x270F)-Internet Explorer 9. Webページは、!DOCTYPEディレクティブに関係なく、IE9標準モードで表示されます。
  • 9000(0x2328)-Internet Explorer9。標準ベースの!DOCTYPEディレクティブを含むWebページは、IE9モードで表示されます。
  • 8888(0x22B8) -Webページは、!DOCTYPEディレクティブに関係なく、IE8標準モードで表示されます。
  • 8000(0x1F40) -標準ベースの!DOCTYPEディレクティブを含むWebページがIE8モードで表示されます。
  • 7000(0x1B58) -標準ベースの!DOCTYPEディレクティブを含むWebページは、IE7標準モードで表示されます。

完全なドキュメント:

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


8
IE 9がインストールされていると、IE8モードでレンダリングするページを取得できないようです。値を7000に設定すると、IE 7モードになり、8000/8888/9000/9999に設定すると、IE9モードになります。これが何らかのバグなのか、それとも意図的なものなのかはわかりません。
mikel 2011

2
動作を開始する前に、current_userとlocal_machineの両方にキーを追加する必要がありました。しかし、その後成功しました。
サラベイリー

このブログ投稿weblog.west-wind.com/posts/2012/feb/15/…では、レジストリエントリは32ビットWindowsか64ビットWindowsかによって異なると述べています。32ビット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
リチャードチェンバーズ

129

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では必要ないため便利です。


2
コンテンツ部分のさまざまな値は、次の場所にあります。msdn.microsoft.com
KB

この設定をCSSファイルに保存できれば幸いです。今、私は多くのドキュメントを調べる必要がありますか、それともVisual Studioに複数行の検索と置換機能がありますか?
KB

2
メタタグを試しましたが、機能しませんでした。「HTML1115:ドキュメントモードがすでに終了しているため、X-UA互換のMETAタグ( 'IE = 9')は無視されます。」というエラーメッセージが表示され、ウェブページevolpin.wordpress.com/2011/02/に移動しました。 25 /…。解決策は、メタタグが<head>ブロック内の最初の要素であることを確認することでした。
Steg 2012年

21
64ビットWindowsで32ビットアプリケーション(32ビットMSIEを呼び出す)を実行している場合は、レジストリエントリをHKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATIONに追加する必要があることに注意してください。代わりに。
igordc 2012

1
xsl / xsltを介してhtmlをレンダリングしていましたが、何らかの理由でregeditが機能しませんでした...メタがうまくいきました。ありがとう!
MazarD 2014

25

私がこれを見つけた良さに感謝します。以下は非常に重要です。

<meta http-equiv="X-UA-Compatible" content="IE=9" >

これがないと、IE8でうまく機能したにもかかわらず、私が生成していたレポートはIE9のインストール後に機能しませんでした。これらはWebブラウザコントロールに正しく表示されますが、.Print()を呼び出すと、文字が欠落したり、空白がジャッキアップしたりします。これらは、Mosaicでもレンダリングできる基本的なHTMLでした。なぜIE7互換モードがうまくいかなかったのかわからない。特に、同じページを5回.Print()すると、毎回異なる文字が欠落する可能性があります。PDF出力にも引き継がれるので、間違いなくブラウザです。


17

数人の人をつまずかせるように見える64ビットWindowsについてのメモ。アプリが64ビットWindowsで実行されている場合は、代わりに[HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION]でDWORDを設定する必要があります。


16

完全にするために...

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ブラウザーの動作に影響を与える他のいくつかのレジストリの変更に関するメモが含まれています。


1
DWORDの部分は非常に重要です。QWORDは機能せず、簡単に間違いを犯す可能性があります。
pvieira

VSでデバッグする場合は、myappname.vshost.exeのエントリも追加する必要があることを付け加えておきます。一方で、デバッガーからアプリを起動してからデバッガーで起動するだけでもうまくいくと思います。私にとっては一度はうまくいったと思います。しかし、私は100%確信していません。
パパスマーフ2017年

1
IE11の構成が原因で、IE11を開いて、信頼できるサイトにリンク先URLを追加する必要がありました。これがないと、レジストリが適切に構成されていても、ページスクリプトは実行されませんでした。
トニー

15

私はこのスレッドが古く、すでに包括的な答えがあることを知っています。

あなたがこれを知らない場合に備えて:

<meta http-equiv="X-UA-Compatible" content="IE=edge" >

IEのバージョン番号を次のようにハードコーディングする必要はありません

<meta http-equiv="X-UA-Compatible" content="IE=9" >


これは問題とは関係ありません。特定のプログラムのレジストリ設定で上書きされない限り、WebBrowserコントロールはIE7モードでのみ読み込まれます。
クリスチャン

4
@クリスチャンよろしいですか?私の知る限り、Webページ<meta http-equiv="X-UA-Compatible" content="IE=edge" >のヘッダーにが含まれている場合、webBrowserは最新のIEモードで読み込まれます。mikelの回答に90以上の賛成票があるのはなぜですか?彼の解決策が機能するからです。Webページを変更できる場合は、レジストリを変更する必要はありません。
タイラーロング

私は100%ポジティブですが、それはウェブサイトの場所にもよると思います。私はローカルコンテンツをロードしてきましたが、バージョンが変動する唯一の方法はレジストリを使用することです。私を信じてください、私は他に機能するもののためにレジストリソリューションを捨てますが、他には何も機能していないようです。
クリスチャン

ie = edgeは、レジストリに触れることなく機能しました。ありがとう!
Yisroel M. Olewski 2016年

@Christianこれは確かに質問に関連しています-解決策はうまくいきます。
MarzSocks 2017

6

私は提供された解決策に完全に同意しますが、少し説明することが重要だと思います。必要かもしれません。

提供された値でDWORDを追加する必要がある各プロセス(vshost.exe、yourWinformApplication.exe.svchost、またはapplication.exeの名前も参照)について、私の場合は9000(10進数)をアプリケーションに残します名前を付けて、スムーズでエラーのないスクリプトを実行します。

最も一般的な間違いは、「contoso.exe」をそのまま追加する必要があると信じて、すべてが機能すると考えることです。


3

はい、WebBrowserコントロールは、インストールされているIEのバージョンを使用します。これはもちろん、IE 8を搭載したマシンでアプリケーションを実行すると、依存しているIE9の機能が利用できなくなることを意味します。


2
私の答えをもう一度読んでください。反対票は求められなかった。彼がIE9の機能を使おうとすると、IE9のないマシンにデプロイすると、それらの機能は機能しないと私は言いました。下位互換性レジストリ設定はその事実を変更しません。
Josh

16
あなたの最初の文は明らかに間違っています。あなたの2番目の文は、少なくとも明白で怠惰です。ところで、報復的な反対票をありがとう。とても成熟しています。
ホワイトホーク2011

3
WebBrowserコントロールは、インストールされているIEのバージョンを使用します。ただし、検出スクリプトはそれを認識しない場合があります。この[サイト(whatismybrowser.com/)][1]を試してください。他のサイトから間違った情報が提供されたのは知っていますが、このサイトはブラウザを私のマシンにインストールされているIEのバージョンとして正しく識別しました。[1]:whatismybrowser.com
cjbarth 2013

3

私はこの解決策に到達しましたが、うまくいきませんでした!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]

1

アプリのレジストリ設定を設定する次の(C#)コードが気に入りました。権限が必要かどうかはわかりませんが、インストール後にカットされるかどうかはわかりません。私にとっては、WPFのWebBrowserコントロール内でWebSocketを使用できないという問題を解決しました。

C#webbrowserAjax呼び出し


1

私も同じ問題を抱えていましたが、ここでのレジストリの回答は機能しませんでした。

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)"

-3

ホワイトホークの受け入れられた答えについて。私はちょっとした経験を加えようとしています。コメントを追加しようとしていたのですが、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つのことを行う必要があります。

  1. MS Webサイトにアクセスし、IE(X + N)をダウンロードしてマシンにインストールします。インストール後に再起動する必要があります。

  2. ホワイトホークの答えを適用します。

基本的に:レジストリを使用してこの機能の値を制御するには、実行可能ファイルの名前を次の設定に追加し、目的の設定に一致するように値を設定します。

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ブラウザーをさまざまなレンダリングモードにすることができます。
GSerg 2014年

IE10モードを取得しようとしてインストールされたIE8を試しましたが、まったく機能しません!もう一度試してみましたが、機能しませんでした
Gob00st 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.