2013-03-11 68 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至少你可以確定當前加載來自用戶點擊或其他頁面發生的事情。它無法知道頁面何時被加載,但是可以在用戶觸發新頁面之前啓動一些代碼。這可能會有所幫助,具體取決於您在兩頁之間必須完成的任務的性質。