web-dev-qa-db-ja.com

WebBrowserコントロールをIE9に標準で組み込むにはどうすればよいですか?

internet Explorer(9)で一部のHTMLを表示するためにオートメーション(つまりCOMオートメーション)を使用しています:

_ie = CoInternetExplorer.Create;
ie.Navigate2("about:blank");
webDocument = ie.Document;
webDocument.Write(szSourceHTML);
webDocument.Close();
ie.Visible = True;
_

Internet Explorerが表示され、私のhtmlが表示されます。

_<!DOCTYPE html>
<HTML>
<HEAD>
   ...
_

注:html5標準モードのオプトインDoctype html

ドキュメントがie9標準モードでないことを除いて、 ie8標準モードです。 alt text


最初にHTMLをコンピューターに保存した場合:

alt text

次に、thathtmlドキュメントを表示し、IEが標準モードになります:

alt text

私の質問は、ブラウザを標準モードにするためにSpawnIEWithSource(String html)関数をどのように更新するかです。

_void SpawnIEWithSource(String html)
{
   Variant ie = CoInternetExplorer.Create();
   ie.Navigate2("about:blank");
   webDocument = ie.Document;
   webDocument.Write(html);
   webDocument.Close();
   ie.Visible = true;
}
_

編集:より詳細で理解しにくい、または読みやすいコードサンプルですが、質問の助けにはなりません。

_IWebBrowser2 ie;
CoCreateInstance(CLASS_InternetExplorer, null, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_WebBrowser2, ie);
ie.AddRef();
ie.Navigate2("about:blank");

IHtmlDocument doc;
dispDoc = ie.Document;
dispDoc.AddRef();
dispDoc.QueryInterface(IHTMLDocument2, doc);
dispDoc.Release()
doc.Write(html); 
doc.Close();
doc.Release();
ie.Visible = true;
ie.Release();
_

更新

コメント投稿者がieblogエントリについて質問しました ブラウザモードとドキュメントモードを使用したテストサイト

HTMLコンテンツが埋め込みWebコントロール内にある場合、ドキュメントモードがどのように決定されるかについての説明を取得できますか?ドキュメントモードの選択方法が異なるようです-互換性の理由からでしょうか?

MarkSil [MSFT]が応答しました:

@Thomas:その質問を提起してくれてありがとう。 WebBrowserコントロールは、IEと同じ方法でドキュメントモードを決定します。これは、同じWebプラットフォームが含まれているためです(たとえば、IEに1つの共有mshtml.dllがあり、 WebBrowser Controlのホスト。WebBrowserControlは、デフォルトで互換表示ブラウザモードに設定されます。つまり、デフォルトのドキュメントモードはIE7です。これについて詳しくは、ブログの投稿 blogs.msdn.com/ .. ./more-ie8-extensibility-improvements.aspx

トーマスはそれに応じました:

@MarcSil(re:WebBrowser Control)

レジストリエントリを使用してWebControlのドキュメントモードを選択する場合の問題は、アプリケーション全体に適用されることです。私は、UIを作成するためのWebDialogウィンドウがあるGoogle SketchUpのプラグインを作成します。これは、ウィンドウ内のWebBrowserコントロールにすぎません。しかし、SUのWebBrowserコントロール全体ではなく、WebBrowserコントロールのインスタンスにドキュメントモードを強制したいので、これは問題を引き起こします。

だから、私の質問です:WebBrowserコントロールのインスタンスごとにドキュメントモードをどのように制御しますか?

27
Ian Boyd

あなたのhtmlで設定してみましたか

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

または

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

最新バージョンを意味します

28

IE8のバージョンと同様に、WebBrowserコントロールのIE9の「バージョン」は、実際には1つの複数のブラウザーです。 IE8バージョンとは異なり、doctypeを変更することで、ページ内のレンダリングモードをもう少し制御できます。もちろん、ブラウザモードを変更するには、以前の回答のようにレジストリを設定する必要があります。 FEATURE_BROWSER_EMULATIONの場所は次のとおりです:

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
     SOFTWARE
          Microsoft
               Internet Explorer
                    Main
                         FeatureControl
                              FEATURE_BROWSER_EMULATION
                                   contoso.exe = (DWORD) 000090000

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

  • 9999(0x270F)-Internet Explorer9。!DOCTYPEディレクティブに関係なく、WebページはIE9標準モードで表示されます。
  • 9000(0x2328)-Internet Explorer9。標準ベースの!DOCTYPEディレクティブを含むWebページは、IE9モードで表示されます。
  • 8888(0x22B8)-!DOCTYPEディレクティブに関係なく、Webページは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

13
whitehawk

FEATURE_BROWSER_EMULATIONCoInternetSetFeatureEnabled では機能しません。 [〜#〜] internetfeaturelist [〜#〜] のドキュメントはIE7以降更新されていません。

機能設定はHKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControlの下にあるため、レジストリを使用してプロセスの値をオーバーライドできますmay APIフック。

2