webBrowser.Document.Write() 不规则性能
Posted
技术标签:
【中文标题】webBrowser.Document.Write() 不规则性能【英文标题】:webBrowser.Document.Write() Irregular Performance 【发布时间】:2012-01-25 09:19:50 【问题描述】:我正在使用 webBrowser 控件作为我的应用程序的主输出窗口。我第一次使用 document.write() 时,文本被完全替换。我正在写的文本第二次被附加到末尾。我已经确认我不是偶然写了两次或添加了太多次字符串。为什么控件会这样?
【问题讨论】:
一个典型的错误是在更改 DOM 之前没有等待 DocumentCompleted 事件。 不应该每次都出现错误,而不仅仅是第一次出现吗?大多数时候我都在使用:while (this.webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();等待。 你之前没有提到错误,但是使用 DoEvents() 确实是一个很好的射脚方法。 ***.com/questions/5181777/use-of-application-doevents/… 感谢您的链接。我只使用 DoEvents() 让 webBrowser 文本完成加载。它似乎没有引起任何问题,并防止程序在从历史记录中加载数百条消息时崩溃。 【参考方案1】:如果这对你不起作用,这里是另一种选择,
webBrowser1.DocumentText = "<html><BODY>I am Vinod Srivastav</BODY></HTML>";
设置在 WebBrowser 控件中显示的页面的 HTML 内容。
【讨论】:
【参考方案2】:在编写文档之前致电OpenNew。
HtmlDocument doc = webBrowser1.Document.OpenNew(true);
doc.Write("<HTML><BODY>This is a new HTML document.</BODY></HTML>");
【讨论】:
我正在使用 webBrowser 作为聊天系统的输出。如果写命令只附加文本会更好。不管文档中是否有文本,第一次运行时,所有内容都会被覆盖。你知道这是为什么吗?如果需要,我可以在初始化时写入两次,但这似乎是一种解决方法。如果可能的话,我想实际解决这个问题。 不使用Write
,而是使用InnerHTML
(msdn.microsoft.com/en-us/library/ms533897%28v=vs.85%29.aspx)。您可以不断地追加到 DOM 元素。
有没有办法使用Write 或DocumentText 来完全替换显示的webBrowser 的文本而不会导致导航事件发生?因为它是聊天输出,所有导航事件都被手动阻止和处理,这使我可以有图像弹出窗口并通过链接等打开firefox。编辑:因为 write 命令替换了一次文本,所以我的文档最终成为 ... ...Content
我对这些方法不太熟悉。另一种想法可能是在附加 HTML 的页面中实现 javascript 方法。然后,从您的代码隐藏中,您可以 WebBrowser.InvokeScript 并调用提供新文本作为参数的 Javascript 方法。由于这一切都是在 JS 中完成的,因此不会有刷新,您可以随意附加/覆盖。
我重写了我的应用程序的核心部分,以便可以使用 javascript 添加和删除消息。你可以在这里预览它:nathantornquist.com/code/misc/index6.html 不过我还是有问题。如果您添加来自 John 的消息,则日期会按应有的方式闪烁。杰克的日期不闪现,也不应该闪现。然而,当杰克发送消息时,约翰停止闪烁。这些日期应该只在单击收到的按钮时停止。当它被点击时,所有的消息日期都应该是黑色的。不仅仅是他们中的大多数。有什么想法吗?以上是关于webBrowser.Document.Write() 不规则性能的主要内容,如果未能解决你的问题,请参考以下文章