27

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標準モードのオプトインDoctypehtml

ドキュメントがIE9標準モードでないことを除いて; IE8標準モードです: 代替テキスト


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

代替テキスト

次に、そのhtmlドキュメントを表示すると、IEは標準モードになります。

代替テキスト

私の質問は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]は次のように回答しました:

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

トーマスが答えた:

@MarcSil(re:WebBrowser Control)

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

だから、私の質問は、WebBrowserコントロールのインスタンスごとにドキュメントモードをどのように制御するかということです。

4

3 に答える 3

28

HTMLで設定してみましたか

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

また

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

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

于 2010-11-04T14:39:13.387 に答える
13

WebBrowserコントロールのIE9「バージョン」は、IE8バージョンと同様に、実際には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 Explorer 9. Webページは、!DOCTYPEディレクティブに関係なく、IE9標準モードで表示されます。
  • 9000(0x2328)-Internet Explorer 9.標準ベースの!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

于 2011-03-18T19:58:21.867 に答える
2

FEATURE_BROWSER_EMULATIONは、 CoInternetSetFeatureEnabledでは機能しません。INTERNETFEATURELISTのドキュメントは、IE7以降更新されていません。

機能設定はHKEY_CURRENT_USER\SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControlにあるため、レジストリAPIフックを介してプロセスの値を上書きできる場合があります。

于 2010-11-04T21:03:12.160 に答える