5

問題:

WebBrowserコントロールが埋め込まれたwinformsアプリケーションを実行しています。マジックレジストリ設定を使用して、このコントロールをIE 8モードに切り替えました(ここで回答したように、IE9 WebBrowserコントロールはSVGを含むIE9のすべての機能をサポートしますか?)。

しかし、メタタグX-UA-Compatible IE = 9(http://msdn.microsoft.com/en-us/library/cc288325 (v=vs.85).aspx現在)を含むWebサイトに移動すると)私のWebブラウザコントロールはIE9モードに切り替わり、レジストリ設定を無視します。

コントロールをIE8モードのままにしておきたい...

私の解決策の試み

IHTMLDOMNode.removeChildを使用してコントロールがロードされた後(Document_complete)にメタタグを削除しようとしましたが、コントロールはページを再レンダリングしません。

HTMLコンテンツを手動で(WebClientを使用して)ロードし、メタタグを削除して、これをWebブラウザーコントロール(Document.WriteまたはDocumentTextを使用)にフィードしようとしましたが、この方法では、コントロールは他のコンテンツ(画像など)のロードを拒否します。

ヘルプ

今、私は自分のHTTPProxyを作成し、途中で応答を変更することを考えていません(これはやりたくないです)。

誰かアイデアはありますか?

.Net 4を使用していますが、表示されるWebサイトを変更できず、X-UA-Compatibleタグに関係なくIE8モードでレンダリングする必要があります...

ありがとう!

4

2 に答える 2

3

私も問題を抱えていDocumentTextました-私はそれをあきらめました。

私の解決策は、インプロセスHTTPサーバーを作成し、それを指すことWebBrowserでした。

私はここにそれについての記事を書きました:http://SimplyGenius.net/Article/WebBrowserEx

私の場合、ファイルシステムからコンテンツを取得していました。
ターゲットのWebサイトに電話をかけるには、これを変更する必要がありますが、それほど手間はかかりません。
その後、HTMLを好きなように変更でき、リンクは引き続き機能します。

于 2012-06-03T09:48:14.340 に答える
2

WebBrowserコントロールにそのタグを無視させ、レジストリ設定を上書きしないようにする方法がわかりません。迅速な(汚い)回避策として、次のことを行うことができます。

WebBrowserコントロールに表示するサイトのリクエストを作成します。

var requestUri = new Uri("http://stackoverflow.com/");
var request = (HttpWebRequest) WebRequest.Create(requestUri);

応答を取得します。

var response = request.GetResponse();
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
    var html = reader.ReadToEnd();
    //...
}

NuGetを使用してHTMLAgilityPackをインストールします。

http://nuget.org/packages/HtmlAgilityPack

取得したHTMLをHtmlDocumentインスタンスにロードします。

var document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(html);

タグを選択します。ここでは、例としてStackOverflow.comを使用し、代わりにそのスタイルシートノードを選択します。見つかったら、ノードを削除します。

var nodes = document.DocumentNode.SelectNodes("//link[@rel=\"stylesheet\"]");
foreach(var node in nodes)
{
    node.ParentNode.RemoveChild(node);
}

残っているのは、変更されたHTMLを取得し、それをWebBrowserコントロールに直接フィードすることだけです。

html = document.DocumentNode.OuterHtml;
webBrowser.DocumentText = html;

そこにないものを解釈することはできません。

あなたはあなたの問題を解決するために同じことをすることができます。リクエストを発行し、レスポンスを取得し、HTMLを変更して、WebBrowserコントロールにフィードします。テストしましたが、ドキュメントの残りの部分は正常に読み込まれているようです。

于 2012-06-03T09:18:29.327 に答える