web-dev-qa-db-ja.com

WKWebViewが毎回ロードを終了したことを検出します

IPadのiOS8で実行されているWKWebViewアプリがあります(標準のiPad UserAgent: "Mozilla/5.0(iPad; Mac OSXのようなCPUOS 8_1_1)AppleWebKit/600.1.4(GeckoのようなKHTML)バージョン/8.0モバイル/ 12B436Safari/600.1 .4 ")。毎回、ページの読み込みが完了したことを検出するために、考えられるすべてのデリゲートとリスナーを試しました。ここに問題があります:

  1. WKWebViewを開き、Googleにアクセスします。以下が呼び出されます。

    _decidePolicyForNavigationAction
    _didStartProvisionalNavigation
    _ didFinishNavigation
    
  2. Googleに「YouTube」と入力します。_decidePolicyForNavigationActionのみが呼び出されます。 didStartProvisionalNavigationまたはdidFinishNavigationはありません

  3. Google内のYouTubeをクリックします。以下が呼び出されます。

    _didStartProvisionalNavigation
    _decidePolicyForNavigationAction
    _ didFinishNavigation
    
  4. これから、YouTube内何も呼ばれません。 YouTubeビデオをクリックし、didStartProvisionalNavigationまたはdidFinishNavigationはクリックしません。また、webview.loadingオブザーバーは呼び出されなくなりました。 decidePolicyForNavigationActionでさえ、たまにしか呼び出されません。ただし…webView.backForwardList.currentItemはクリックするたびに更新されるため、ページの読み込みが何らかの理由で終了したことを検出している必要がありますか?

この動作は、他の多くのサイト(Vimeoなど)でも発生します。このタイプのサイトがメインフレームを毎回更新しているわけではないことは知っていますが、読み込みが現在の状態でWKWebViewの「制限」を開始/終了したことを検出する機能がないのでしょうか。

私が達成したいのは、ナビゲーションがいつ完了したかを検出する別の方法がありますかJava YouTube/VimeoなどのモバイルWebサイト内

  • NSURLProtocolまたは同様のものを使用していますか?
  • または、webView.backForwardList.currentItemがいつ更新されたかを検出する方法はありますか?

助けてくれてありがとう。

16
AT3D

ページが読み込まれたときに正確に何をしたいかはわかりませんが、これらのプロパティを観察することが役立つことを願っています。

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)
12
zh.