2017-01-06 21 views
10

[UIWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:]は、従来の<a href="...">リンクでのみ呼び出され、単一ページのWebアプリケーションのJavaScriptナビゲーションでは呼び出されないことに気付きました。UIWebViewのナビゲーションの変更を正しく聞くには?

例えば、UIWebViewでm.facebook.comにアクセスし、トップのナビゲーション(下記のスクリーンショットを参照)をタップしても、そのデリゲートメソッドはトリガーされません。

私は、UIWebViewの上に戻るボタンと進むボタンを追加したいので、メソッドをフックしたいのですが、これらのボタンを有効/無効にするタイミングを知る必要があります。ナビゲーションの変更を正しく聞くために使用すべき他のデリゲートメソッドがありますか?

更新:モバイルSafariはFacebookのモバイルサイトのバック/フォワードボタンの状態を正しく更新するので、Appleが開発者にもこれを行う方法を公開してくれることを願っています。

enter image description here

+0

あなたは '[UIWebView canGoBack]'を見ましたか? https://developer.apple.com/reference/uikit/uiwebview/1617931-cangoback – SergGr

+0

@SergGrは、ナビゲーションの変更によってcanGoBackを呼び出すタイミングを知っている必要があるため、私を助けない –

答えて

5

これは単にUIWebViewDelegate、また(私はFacebookのでテスト済み)WKNavigationDelegateでサポートされていないように思えます。 this answerに記載されているいくつかのオプションがあります。

  1. (history.pushStateをよく読んで)ページの変更を取り込むためにはJavaScript注入。
  2. KVOがwebviewの変更を監視する(スクロールビューのサイズ変更のように)
  3. 上記のようにタイトルの変更を監視します。
  4. ユーザーがビューをタップするたびに更新をチェックします。

更新

私はまた、それぞれの新しいページのロード中のXMLHttpRequestsをキャッチするためにJavaScriptを注入する必要のFacebook、上this answerを試してみました。それはソートのあなたは何を求めているが、ハックのビットです。 Facebookのタブの中には非常に単純な実装では正しく動作しないものもありますが、問題を回避することができます。

関連する問題