2013-03-11 75 views
2

我想知道当页面加载完成时UIWebView。我知道didStartLoad/didFinishLoadoutlined in here之间的“refcounting”方法,它对我来说很有用,但我对此并不是很有信心。它已经长大了一些毛发ifs,并且当Javascript决定与document.location谈话时,它仍然很奇怪。我不清楚即了解以下信息:iOS UIWebView页面加载可观察性

  1. UIWebViewDelegate所有应该处理的权力,是非常简洁,具有next to none documentation。任何人都可以确认didStartLoad/didFinishLoad真的只被称为“帧”,这意味着最有可能“框架/帧”和“iframe”?
  2. 如何从请求重定向(也产生事件)区分上述DOM引发的负载?
  3. 我的观察是,除了重定向之外,每个didStartLoad都以shouldStartLoadWithRequest开头。这是一个可靠的行为?
  4. 我错过了什么,或者有没有办法知道什么请求发起了特定的didStartLoad?由于给出的唯一上下文[[webView request] URL]始终返回相同的URL,即最初要求加载UIWebView的那个URL。

回答

0
  1. 我不能。
  2. 我不知道。
  3. 我不知道。
  4. 我看不出来。

有用的答案,对吧?我想UIWebViewDelegate可以(应该?

我尝试观察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://didStartLoadingSomethingWithJavascriptDudemyApp://didFinishLoadingSomethingWithJavascriptDude定制方案)

0

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