iOS UIWebView页面加载可观察性

时间:2013-03-11 16:22:10

标签: ios uiwebview uiwebviewdelegate

我想知道在UIWebView中完成页面加载的时候。我知道didStartLoad / didFinishLoad outlined in here之间的“引用计数”方法,它有点适用于我,但我对此并不十分自信。当Javascript决定与ifs交谈时,它已经长大了document.location并且仍然很奇怪。我不清楚以下内容:

  1. UIWebViewDelegate它应该处理的所有权力,非常简洁并且有next to none documentation。任何人都可以确认didStartLoad / didFinishLoad是真的只为“框架”调用,这意味着很可能是“框架集/框架”和“iframe”吗?
  2. 如何区分上述DOM引起的负载与请求重定向(也产生事件)?
  3. 我的观察是每个didStartLoad前面都有shouldStartLoadWithRequest,但重定向除外。这是一种可靠的行为吗?
  4. 我错过了什么,或者是否无法知道特定didStartLoad的请求是什么?因为给定的唯一上下文的[[webView request] URL]总是返回相同的URL,即最初要求UIWebView加载的URL。

2 个答案:

答案 0 :(得分:0)

  1. 我不能。
  2. 我不知道。
  3. 我不知道。
  4. 我说不出来。
  5. 有用的答案,对吧?

    显然,我认为UIWebViewDelegate可能(应该?)对UIWebView中发生的事情更具表现力。

    我尝试观察UIWebView活动是:

    • 在加载iOS 6时添加观察者:从未调用过观察者。
    • 尝试:

    委托方法样本:

    - (void)webViewDidStartLoad:(UIWebView *)webView {
        [self.activityIndicator startAnimating];
    }
    
    - (void)webViewDidFinishLoad:(UIWebView *)webView {
        if (!webView.loading) {
            [self.activityIndicator stopAnimating];
        }
    }
    

    效果很好。

    我认为你应该使用你提到的JavaScript和iframe技巧来尝试这个代码。 它没有帮助,但你拥有你正在谈论的JavaScript,你也可以考虑向你的应用发送信号,以指示正在进行进一步的加载操作(比如使用自定义方案调用URL,如myApp://didStartLoadingSomethingWithJavascriptDude和{{1 }})

答案 1 :(得分:0)

至少来自UIWebViewNavigationType的{​​{1}},您可以确定当前加载是来自用户点击还是页面上发生的任何其他内容。它无法知道页面何时被加载,但您可以在用户触发新代码之前启动一些代码。它可能会有所帮助,具体取决于你必须在两页之间完成任务的性质。