it-swarm.com.de

.Net WebBrowser.DocumentText ändert sich nicht!

In meinem vb.net-Programm verwende ich einen Webbrowser, um dem Benutzer eine HTML-Vorschau anzuzeigen. Zuvor war ich auf einen Server gestoßen, um den HTML-Code abzurufen, kehrte dann zu einem asynchronen Thread zurück und löste ein Ereignis aus, um den WebBrowser.DocumentText mit der zurückgegebenen HTML-Zeichenfolge aufzufüllen.

Jetzt habe ich es eingerichtet, um alle Informationen auf dem Client zu erfassen, ohne den Server jemals treffen zu müssen, und ich versuche, dasselbe Ereignis zu melden. Ich sehe, wie der Code durchläuft, und der HTML-String ist korrekt und alles, aber wenn ich es versuche

browser.DocumentText = _emailHTML

der Inhalt von DocumentText bleibt als "<HTML></HTML>"

Ich habe mich nur gefragt, warum der DocumentText nicht gesetzt wurde. Hat jemand Anregungen?

37
Joe Morgan

Versuche Folgendes:

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

Ich habe festgestellt, dass das WebBrowser-Steuerelement ohnehin auf about:blank initialisiert werden muss. Dasselbe muss zwischen den verschiedenen Inhaltstypen (wie text/xml bis text/html) gemacht werden, da der Renderer unterschiedlich ist (mshtml für text/html, etwas anderes für text/xml).

(über http://geekswithblogs.net/paulwhitblog/archive/2005/12/12/62961.aspx )

53
David Mohundro

Ich habe folgendes gefunden und es hat funktioniert!

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

Ich fand den besten Weg, um damit umzugehen, ist wie folgt:

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

Ich habe dies in einem Teil unseres alten Codes entdeckt.

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

Application.DoEvents();

Anscheinend bringt ein DoEvents auch den Browser zum Rendern

1
johnc

Das hat für mich funktioniert:

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

Das funktioniert immer

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

Während Application.DoEvents() es in einem WinForms-Projekt reparierte, war es in einem WPF-Projekt unerheblich.

Ich habe es endlich mit webBrowser.Write( htmlContent ) (anstelle von webBrowser.DocumentText = htmlContent) zum Laufen gebracht.

0
AVIDeveloper

bitte beziehen Sie sich auf diese Antwort c # filenotfoundexception im Webbrowser?

0
JOE SKEET

Stellen Sie sicher, dass Sie Navigating event von WebBrowser nicht für about: blank page abbrechen. WebBrowser navigiert zu about: blank vor dem Setzen von DocumentText . Wenn Sie also Links selbst behandeln möchten, müssen Sie den folgenden Handler von erstellen Navigieren Ereignis:

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