WebbrowserコントロールをIE9に標準に入れるにはどうすればよいですか?
-
28-09-2019 - |
質問
インターネットエクスプローラー(9)にHTMLを表示するために、自動化(つまりCOM Automation)を使用しています。
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標準モードです:
最初に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コンテンツが組み込みWebControl内にあるときにドキュメントモードがどのように決定されるかについて説明できますか?ドキュメントモードの選択は異なっているようです - 多分互換性の理由で?
マークシル[MSFT]が応答しました:
@Thomas:その質問を提起してくれてありがとう。 Webbrowserコントロールは、同じWebプラットフォームが含まれているためにIEと同じ方法でDOCモードを決定します(たとえば、IEとWebbrowserコントロールホストに1つの共有MSHTML.DLLがあります)。 Webbrowserコントロールは、デフォルトで互換性ビューブラウザーモードになります。つまり、デフォルトのドキュメントモードはIE7です。これについての詳細が記載されたブログ投稿です。 blogs.msdn.com/.../more-ie8-extensibility-improvements.aspx.
トーマスが答えた:
@marcsil(re:webbrowserコントロール)
レジストリエントリを使用してWebControlのドキュメントモードを選択する問題は、アプリケーション全体に適用されることです。 Google SketchUp用のプラグインを作成します。ここでは、WebDialog Windowsがあり、UISを作成します。これは、ウィンドウ内のWebbrowserコントロールです。しかし、SUのすべてのWebbrowserコントロールではなく、Webbrowserコントロールのインスタンスにドキュメントモードを強制したいため、それは問題につながります。
それで、私の質問は次のとおりです。ウェブブラウザーコントロールのインスタンスごとのドキュメントモードをどのように制御しますか?
解決
HTMLで設定してみましたか
<meta http-equiv="X-UA-Compatible" content="IE=9" />
また
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
つまり、最新バージョンを意味します
他のヒント
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) - インターネットエクスプローラー9. Webページは、!Doctypeディレクティブに関係なく、IE9標準モードで表示されます。
- 9000(0x2328) - インターネットエクスプローラー9.標準ベースの!Doctypeディレクティブを含むWebページはIE9モードで表示されます。
- 8888(0x22b8) -WebPagesは、!Doctypeディレクティブに関係なく、IE8標準モードで表示されます。
- 8000(0x1f40) - 標準ベースのウェブページ!doctypeディレクティブはIE8モードで表示されます。
- 7000(0x1b58) - 標準ベースのウェブページ!Doctypeディレクティブは、IE7標準モードで表示されます。
完全なドキュメント:
http://msdn.microsoft.com/en-us/library/ee330730%28vs.85%29.aspx#browser_emulation
feature_browser_emulation 一緒に機能しません cointernetsetfeatureEnabled. 。のドキュメント InternetFeaturelist IE7以降は更新されません。
機能設定はhkey_current_user software microsoft internet explorer main featurecontrol youの下にあります。 五月 レジストリAPIフックを介して、プロセスの値をオーバーライドできます。