2013-03-11 1 views
2

Я хотел бы знать наверняка, когда загрузка страницы завершена в UIWebView. Я знаю о подходе «refcounting» между didStartLoad/didFinishLoadoutlined in here, и это работает для меня, но я не очень уверен в этом. Он вырос немного волосатый ifs и все еще действует странно, когда Javascript решает поговорить с document.location. Я неясно, а именно о следующем:Наблюдаемая нагрузка на страницу IOS UIWebView

  1. UIWebViewDelegate для всей силы он должен обрабатывать, очень лаконична и имеет next to none documentation. Может ли кто-нибудь подтвердить, что didStartLoad/didFinishLoad действительно вызывается только для «кадров», что означает, скорее всего, «frameset/frame» и «iframe»?
  2. Как я могу отличить вышеуказанные нагрузки, вызванные DOM, от перенаправления запросов (которые также создают события)?
  3. Мое наблюдение заключается в том, что каждому didStartLoad предшествует shouldStartLoadWithRequest, за исключением перенаправления. Это надежное поведение?
  4. Я что-то пропустил, или нет способа узнать, какой запрос вызвал конкретный didStartLoad? Потому что [[webView request] URL] единственного заданного контекста всегда возвращает тот же URL-адрес, который был предварительно запрошен UIWebView.

ответ

0
  1. Я не могу.
  2. Я не знаю.
  3. Я не знаю.
  4. Не могу сказать.

Полезный ответ, верно?

Очевидно, я думаю, что UIWebViewDelegate может (должен?) Быть немного более выразительным о том, что происходит в UIWebView.

Мои попытки обнаружить UIWebView деятельности были:

  • добавление наблюдателя при загрузке с прошивкой 6: наблюдатель никогда не называли.
  • пытаются что: методы

Делегирование образцы:

- (void)webViewDidStartLoad:(UIWebView *)webView { 
    [self.activityIndicator startAnimating]; 
} 

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

, который работает достаточно хорошо.

Я думаю, вы должны попробовать этот код с помощью JavaScript и тэгов iframe, о которых вы упоминаете. Это это не помогает, но что у вас есть JavaScript вы говорите, вы могли бы также рассмотреть вопрос о посылке сигналов к вашему приложению, чтобы указать дальнейшие действия нагрузки в процессе (как вызов URL с пользовательской схемой как myApp://didStartLoadingSomethingWithJavascriptDude и myApp://didFinishLoadingSomethingWithJavascriptDude)

0

С UIWebViewNavigationType от shouldStartLoadWithRequest, по крайней мере, вы можете определить, текущая загрузка происходит от щелчка пользователя или чего-либо еще, что произошло на странице. Он не может не знать, когда страница определенно загружена, но вы можете запустить какой-то код до того, как пользователь начнет новый. Это может помочь, в зависимости от характера задачи, которую вы должны выполнять между двумя страницами.

 Смежные вопросы

  • Нет связанных вопросов^_^