web-dev-qa-db-ja.com

WinFormsアプリでIE WebBrowserControlの互換表示をオフにするにはどうすればよいですか?

WinFormsアプリでWebBrowserコントロールを使用すると、互換モードに強制されるようです。これを無効にして、スタンドアロンのIEが同じサイトを閲覧するときのマシン上で行うのと同じように動作させるにはどうすればよいですか?

  • レジストリを変更したくありません。すべてをアプリ内に含める必要があります。
  • 読み込んでいるWebサイトは私のWebサイトではないため、変更することはできません(アプリケーション内からプログラムで実行できる場合を除く)。
33
Danny Tuppeny

次のレジストリ設定を構成する以外にこれを行う方法はありません。

 HKLM\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 

または、64ビットWindows上の32ビットアプリの場合:

 HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION` 

これらの設定は、WebBrowserコントロールには表示されません。

詳細については、以下を参照してください。

何IE webbrowserコントロールは互換モードを使用しますか?

リンクが切れた場合:

実行可能ファイルの名前と一致するDWORD値を作成し、この値を次のいずれかに設定します。

7000:標準ベースの<!DOCTYPE>ディレクティブを含むページがIE7モードで表示されます。
8000:標準ベースの<!DOCTYPE>ディレクティブを含むページがIE8モードで表示されます
8888:<!DOCTYPE>ディレクティブに関係なく、ページは常にIE8モードで表示されます。 (これにより、前述の例外がバイパスされます。)
9000:IE9設定を使用してください!
9999:IE9を強制

例えば:

enter image description here

IE9での私自身の実験から:

  • 9000-IE9のグローバル互換モード設定で設定された互換モードを継承します。すなわち: enter image description here

  • 9999-グローバルに構成された互換モード設定に関係なく、ホストアプリケーションでIE9を互換モードから強制的に解除します

アプリケーションでは、使用する値を決定するために、基本となるIEバージョンが利用可能であることを検出する必要があります。

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Version 

または、64ビットWindows上の32ビットアプリの場合:

 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Version 

IE8が登場したときからのこの古い記事もあり、一見の価値があります。

IE8拡張機能のその他の改善

これらの設定は、以下のユーザーごとに構成することもできます。

 HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 
55
Kev

それはあなたが尋ねたものではありませんが、あなたがサイトを所有しているなら、あなたはhtmlのheadセクションに以下を加えることができます:

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

参照: http://msdn.Microsoft.com/en-us/library/cc288325(v = vs.85).aspx

問題のスキニーは次のとおりです。ユーザーがIE8で互換表示を有効にすると、すべてのページディレクティブがoverrideされます。したがって、使用しようとするページまたはサーバー変数は、ユーザーがIEでこの機能を有効にしている場合、IEが互換表示に切り替わるのを防ぐことができません。ほとんどの人はページ指示または何らかの秘密ヘッダーサーバー変数はサイトを修正します。いいえ、設定が手動でオーバーライドされた場合、これらのソリューションは機能しません。私は知っている、それはクールではないので、次はユーザー互換表示機能を有効にしていません

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

レジストリでこれを変更する手順を明確にするには、キーを編集します。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

次に、iexplore.exeという新しいDWORDを追加します。これを行うには、キーを右クリックし、[新規]> [DWORD]を選択します。そのDWORDに9999の10進数値を与えます。これにより、すべてのサイトが互換表示なしでレンダリングされます。互換表示を再度有効にするには、このDWORDを削除します。また、この変更を自動化し、システムでバッチスクリプトを実行する場合は、Michal Mのスクリプトを確認してください。

https://Gist.github.com/michal-m/1853315

5
mbokil

これは古い質問であることは知っていますが、互換表示を無効にするために、Visual Basic 2010以降のwebbrowserコントロールにヘッダーを挿入する方法があります。

最初に行う必要があるのは、現在のWebページをキャッチして、次のようにheadタグを置き換えることです。

Sub compatible()
' --- simple routine to disable compatible view.

    Dim the_url As String
    Dim message As String
    Dim theReplacement As String
    Dim oldMessage As String

    the_url = WebBrowser1.Url.OriginalString

    WebBrowser1.Navigate(the_url)

    message = "<head>" + Chr(13) + Chr(10) + "<meta http-equiv=" + Chr(34) + "X-UA-Compatible" + Chr(34) + "content=" + Chr(34) + "IE=Edge" + Chr(34) + " />" + Chr(13) + Chr(10) + "<base href=" + Chr(34) + the_url + Chr(34) + ">"

    oldMessage = WebBrowser1.DocumentText.ToString()

    theReplacement = Replace(oldMessage, "<head>", message)
    WebBrowser1.DocumentText = theReplacement

End Sub

このコードは、webbrowserコントロールに次の2行を追加します。

<meta http-equiv="X-UA-Compatible"content="IE=Edge" />
<base href="(url of the web page)">
2
Cynthia Fridsma