.Net WebBrowser.DocumentText не меняется!
В моей программе vb.net я использую веб-браузер, чтобы показать пользователю предварительный просмотр HTML. Я ранее ударил сервер, чтобы захватить HTML, а затем вернулся в асинхронный поток и собрал событие, чтобы заполнить WebBrowser.DocumentText с возвращаемой HTML-строкой.
Теперь я настроил его, чтобы захватить всю информацию на клиенте, без необходимости ударять по серверу, и я пытаюсь поднять одно и то же событие. Я просматриваю код, и он имеет строку HTML правильно и все, но когда я пытаюсь сделать
browser.DocumentText = _emailHTML
содержимое DocumentText остается как "<HTML></HTML>
"
Мне просто интересно, почему DocumentText не был установлен. У кого-нибудь есть предложения?
Ответы
Ответ 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);
Ответ 6
см. этот ответ С# filenotfoundexception на веб-браузере?
Ответ 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;
// ...
}