webdevqa.jp.net

.Net WebBrowser.DocumentTextは変更されません!

私のvb.netプログラムでは、Webブラウザーを使用してユーザーにHTMLプレビューを表示しています。以前はサーバーにアクセスしてHTMLを取得してから、非同期スレッドで戻り、イベントを発生させて、返していたHTML文字列をWebBrowser.DocumentTextに入力していました。

今度は、サーバーにアクセスする必要なく、クライアント上のすべての情報を取得するように設定し、同じイベントを発生させようとしています。コードが通過するのを見ると、HTML文字列は正しく、すべてが含まれていますが、実行しようとすると

browser.DocumentText = _emailHTML

documentTextの内容は "<HTML></HTML> "

なぜDocumentTextが設定されていないのかと思っていました。誰か提案がありますか?

40
Joe Morgan

以下を試してください:

browser.Navigate("about:blank");
HtmlDocument doc = browser.Document;
doc.Write(String.Empty);
browser.DocumentText = _emailHTML;

とにかく、通常、WebBrowserコントロールをabout:blankに初期化する必要があることがわかりました。レンダラーが異なるため(text/xmlからtext/htmlのように)、異なるタイプのコンテンツへのナビゲート間でも同じことを行う必要があります(text/htmlのmshtml、text/xmlの何か)。

(-- http://geekswithblogs.net/paulwhitblog/archive/2005/12/12/62961.aspx 経由)

56
David Mohundro

私は次を見つけました、そしてそれはうまくいきました!

    webBrowser.Navigate("about:blank");
    webBrowser.Document.OpenNew(false);
    webBrowser.Document.Write(html);
    webBrowser.Refresh();
35
Matthias

これを処理する最良の方法は次のとおりです。

if (this.webBrowser1.Document == null)
{
    this.webBrowser1.DocumentText = htmlSource;
}
else
{
    this.webBrowser1.Document.OpenNew(true);
    this.webBrowser1.Document.Write(htmlSource);
}
11
FreddieH

それは私のために働きました:

webBrowser.Navigate("about:blank");
webBrowser.Document?.Write(htmlString);
2
Interferank

私たちの古いコードのいくつかでこれを見つけました。

_webBrowser.DocumentText = builder.WriteToString( ... );

Application.DoEvents();

どうやらDoEventsもブラウザをレンダリングします

1
johnc

これは常に機能します

using mshtml;


private IHTMLDocument2 Document
{
    get
    {
        if (Browser.Document != null)
        {
            return Browser.Document.DomDocument as IHTMLDocument2;
        }

        return null;
    }
}


if (Document == null)
{
    Browser.DocumentText = Contents;
}
else
{
    Document.body.innerHTML = Contents;
}
0
Prads

WinFormsプロジェクトでApplication.DoEvents()を修正しましたが、WPFプロジェクトでは無関係でした。

(_webBrowser.DocumentText = htmlContent_の代わりに)webBrowser.Write( htmlContent )を使用してようやく動作しました。

0
AVIDeveloper

この回答を参照してください c#filenotfoundexception on webbrowser?

0
JOE SKEET

WebBrowserNavigatingイベントをキャンセルしないようにしてください- about:blankページ。 WebBrowserは、設定前にabout:blankに移動しますDocumentText。したがって、自分でリンクを処理する場合は、Navigatingイベントのハンドラーを作成する必要があります。

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
    if(e.Url.OriginalString.StartsWith("about:"))
    {
        return;
    }
    e.Cancel = true;
    // ...
}
0
antgraf