Обнаружение, когда WKWebView закончил загрузку КАЖДЫЙ раз

У меня есть приложение WKWebView, работающее на iOS8 на iPad (стандартный iPad UserAgent: "Mozilla/5.0 (iPad, CPU OS 8_1_1, как Mac OS X) AppleWebKit/600.1.4 (KHTML, например, Gecko) Версия /8.0 Mobile/12B436 Safari/600.1.4" ). Я пробовал всех делегатов и слушателей, которые я могу придумать, чтобы попытаться определить, когда страница закончила загрузку, каждый раз. Вот проблема:

  • Откройте WKWebView и перейдите в Google. Вызывается следующее:

    _decidePolicyForNavigationAction
    _didStartProvisionalNavigation
    _ didFinishNavigation
    
  • Введите "YouTube" в Google:   ТОЛЬКО _decidePolicyForNavigationAction вызывается. No didStartProvisionalNavigation или didFinishNavigation

  • Нажмите на YouTube в Google. Вызывается следующее:

    _didStartProvisionalNavigation
    _decidePolicyForNavigationAction
    _ didFinishNavigation
    
  • С этого момента в YouTube ничего не называется. Нажмите на видеоролик YouTube и не сделайте StartStringProvisionNavigation или didFinishNavigation. Кроме того, webview.loading observer больше не вызывается. Даже decisionPolicyForNavigationAction вызывается только время от времени. ОДНАКО... webView.backForwardList.currentItem обновляется после каждого щелчка, поэтому это должно обнаруживать, когда страница закончила загрузку каким-то образом?

Такое поведение происходит и на многих других сайтах (например, Vimeo). Я знаю, что этот тип сайта не обновляет основной кадр каждый раз, но есть ли это отсутствие возможности обнаруживать, когда загрузка началась/завершилась "ограничение WKWebView в текущем состоянии?"

Чего я хочу достичь: есть ли другой способ обнаружить, когда ПОЛНАЯ ЗАПИСЬ, КАЖДОЕ ВРЕМЯ в мобильных веб-сайтах Java, таких как YouTube/Vimeo:

  • Использование NSURLProtocol или подобное?
  • Или, может быть, способ определить, когда Обновлен webView.backForwardList.currentItem?

Спасибо за любую помощь.

Ответы

Ответ 1

Я не уверен, что именно вы хотите сделать, когда страница загрузилась, но, надеюсь, эти свойства могут помочь вам:

webView.addObserver(self, forKeyPath: "estimatedProgress", options: .New, context: nil)
webView.addObserver(self, forKeyPath: "loading", options: .New, context: nil)
webView.addObserver(self, forKeyPath: "title", options: .New, context: nil)
webView.addObserver(self, forKeyPath: "canGoBack", options: .New, context: nil)
webView.addObserver(self, forKeyPath: "canGoForward", options: .New, context: nil)