【问题标题】:iphone: How do I know the UIWebView is fully loaded?iphone:我怎么知道 UIWebView 已满载?
【发布时间】:2011-08-30 05:38:55
【问题描述】:

是的,我知道 UIWebView 有 didFinishedLoad 和 didStartLoad 委托。

但是,didFinishedLoad 并不意味着完全完成。它可以在 UIWebView 完成加载的项目之一时调用。即,UIWebView 可能会在加载单个页面时多次调用此委托。

那么无论如何可以告诉我如何检查 UIWebView 是否已完全加载?

谢谢

J

【问题讨论】:

标签: iphone uiwebview


【解决方案1】:

我在 DOM 方面的经验很差,但经过一番搜索后,我发现 document.readyState 是一个不错的选择。

来自 w3schools:

定义和用法 readyState 属性返回当前文档的(加载)状态。

此属性返回四个值之一:

未初始化 - 尚未开始加载

loading - 正在加载

interactive - 已加载足够多,用户可以与之交互

完成 - 完全加载

所以我用它来知道 UIWebView 何时加载了文档:

- (void)readyState:(NSString *)str
{ NSLog(@"str:%@",str);

if ([str isEqualToString:@"complete"]||[str isEqualToString:@"interactive"]) {
    NSLog(@"IT HAS BEEN DONE");
    [pageLoadingActivityIndicator stopAnimating];
}

}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
 //other code...
 [self readyState:[browserWebView stringByEvaluatingJavaScriptFromString:@"document.readyState"]];
}

【讨论】:

  • if ([str isEqualToString:@"complete"]||[str isEqualToString:@"interactive"]) 是唯一对我有用的东西!
  • 我只从一个网页获得了 27 次“它已完成”日志。所以我不能说它按我预期的那样工作
  • @yucel bayram 当网页有 iframe 或其他类型的内部事物时,实际上是一个与请求的网页同时加载的网页,那么“完成”消息将被多次传递.还有其他东西可以修改“document.readyState”。这种方法适用于简单的网页。
  • 感谢@StanislavS。
【解决方案2】:

http://www.codingventures.com/2008/12/using-uiwebview-to-render-svg-files/ 关于 Javascript 与 Objective-C 代码的通信

也许使用文档位置哈希。

并在webview html body中添加:

<body onload="document.location.hash='myapp:myobject:myfunction';">

我知道它有点老套,但很有效。它可以在基于 ajax 的内容中使用,因为当你想调用你的 ready 方法时,它取决于你。或者它可以作为一个完整的通信方案。

【讨论】:

    【解决方案3】:

    您可以做的是,在状态栏中可见的视图上显示一个网络指示器。当您的页面被加载时,指示器将继续旋转,直到并且除非页面被完全加载。页面完全加载后,指示器将停止旋转并且不可见。
    看看这个例子:Network indicator

    【讨论】:

    • 是的,@Nitish,我知道那个网络指示器。但我的问题是要通过代码而不是眼睛来找出 UIWebView 的完全完成。谢谢
    • 是否可以查询其可见性?
    猜你喜欢
    • 1970-01-01
    • 2011-09-06
    • 2011-05-07
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多