我正在构建一个小型 Mac 应用程序,该应用程序通过 Web 套接字持续提供数据。处理完每个数据段后,数据以WebView
. 新数据永远不会替换任何数据,WebView
而是始终使用 DOM 操作将新数据附加到WebView
内容中。下面的代码示例应该让您了解我在做什么。
DOMDocument *doc = self.webview.mainFrame.DOMDocument;
DOMHTMLElement *container = (DOMHTMLElement *)[doc createElement:@"div"];
NSString *html = [NSString stringWithFormat:@"... omitted for the sake of brevity ... "];
[container setInnerHTML:html];
[doc.body appendChild:container];
的渲染WebView
显然是异步发生的。有没有办法判断 DOM 操作何时完成并且内容已被绘制?我想使用类似[webview scrollToEndOfDocument:self]
实现自动滚动的东西。侦听 DOM 事件并没有帮助,因为它们似乎是在 DOM 被修改但在这些更改被呈现之前触发的。到目前为止我使用的代码类似于以下内容
[self.webview.mainFrame.DOMDocument addEventListener:@"DOMSubtreeModified" listener:self useCapture:NO];
和这个结合
- (void)handleEvent:(DOMEvent *)event
{
[self.webview scrollToEndOfDocument:self];
}
这段代码的问题是滚动发生得太早了。我基本上总是落后一个数据段。我可以注册在绘制内容时触发的任何类型的回调/通知吗?