iOS uiwebview 在加载整个 html 文件之前触发了 finishLoad 事件

Posted

技术标签:

【中文标题】iOS uiwebview 在加载整个 html 文件之前触发了 finishLoad 事件【英文标题】:iOS uiwebview is firing finishLoad event before load whole html file 【发布时间】:2012-05-26 10:46:40 【问题描述】:

我在 uiwebview 上加载静态 html 文件,当 webViewDidFinishLoad 时,我插入以下 javascript 以获取 div 中包含的数据。

NSString *body = [self.webView1 stringByEvaluatingJavaScriptFromString:
                              @"document.getElementById('social').innerHTML"];

NSLog(@"received data: %@", body);

似乎一切正常,但有时 div 是空的!假设 div 总是被填充,因为 div 是静态的,我认为 webViewDidFinishLoad 事件在整个页面加载之前被触发,然后 javascript 会查找尚未准备好的 div。可能的?如果没有,有什么建议吗?如何解决?谢谢。

【问题讨论】:

【参考方案1】:

是的,我注意到有时 webViewDidFinishLoad 会在您认为它应该被触发之前被触发。我不记得我脑海中的细节,但可能是涉及重定向的时候。

当它被调用时,您可以检查页面是否仍在加载:

if (webView.loading)
    return;

或者你可以使用一个 javascript 函数来注册一个事件监听器,当 dom 加载时,当它使用 location.href 技术触发你的 webViewShouldStartLoad 时,使用自定义方案来通知你的代码 dom 已经完成加载。

【讨论】:

感谢您的回答。当出现空值时,Webview.loading 也会返回 false!测试第二个选项...

以上是关于iOS uiwebview 在加载整个 html 文件之前触发了 finishLoad 事件的主要内容,如果未能解决你的问题,请参考以下文章

iOS - UIWebView 加载 HTML 字符串包含 iframe 不起作用

ios之UIWebView常用方法

iOS UIWebView 加载进度条的使用

IOS UIWebView(浏览器控件)

iOS,html使用交互相关

在 uiwebview 中使用本地 html 从相对路径加载资源