Подтвердить что ты не робот

.Net WebBrowser.DocumentText не меняется!

В моей программе vb.net я использую веб-браузер, чтобы показать пользователю предварительный просмотр HTML. Я ранее ударил сервер, чтобы захватить HTML, а затем вернулся в асинхронный поток и собрал событие, чтобы заполнить WebBrowser.DocumentText с возвращаемой HTML-строкой.

Теперь я настроил его, чтобы захватить всю информацию на клиенте, без необходимости ударять по серверу, и я пытаюсь поднять одно и то же событие. Я просматриваю код, и он имеет строку HTML правильно и все, но когда я пытаюсь сделать

browser.DocumentText = _emailHTML

содержимое DocumentText остается как "<HTML></HTML>"

Мне просто интересно, почему DocumentText не был установлен. У кого-нибудь есть предложения?

4b9b3361

Ответ 1

Попробуйте следующее:

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

Я обнаружил, что элемент управления WebBrowser обычно должен быть инициализирован на about:blank в любом случае. То же самое нужно сделать между навигацией к различным типам контента (например, text/xml to text/html), потому что средство визуализации отличается (mshtml для text/html, что-то еще для text/xml).

(через http://geekswithblogs.net/paulwhitblog/archive/2005/12/12/62961.aspx)

Ответ 2

Я нашел следующее, и это сработало!

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

Ответ 3

Я нашел лучший способ справиться с этим:

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

Ответ 4

Просто заметили это в нашем старом коде.

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

Application.DoEvents();

По-видимому, DoEvents также запускает браузер в рендеринг

Ответ 5

Это сработало для меня:

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

Ответ 7

Хотя Application.DoEvents() исправить его в проекте WinForms, это не имело значения в проекте WPF.

Я, наконец, получил его для работы, используя webBrowser.Write( htmlContent ) (вместо webBrowser.DocumentText = htmlContent).

Ответ 8

Это всегда работает

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;
}

Ответ 9

Убедитесь, что вы не отменили навигационное событие WebBrowser на странице about: blank. Перед настройкой DocumentText WebBrowser переходит к примерно: пустой. Поэтому, если вы хотите самостоятельно обрабатывать ссылки, вам необходимо создать следующий обработчик события навигации:

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