如何在UIWebView上正确收听导航更改?

时间:2017-01-06 19:10:06

标签: ios uiwebview

我注意到[UIWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:]仅使用传统的<a href="...">链接调用,而不是单页网络应用JavaScript导航。

例如,如果我在UIWebView中访问m.facebook.com并开始点击顶部导航(请参阅下面的屏幕截图),则永远不会触发该委托方法。

我想要一个方法挂钩的原因是因为我想在UIWebView上面添加后退和前进按钮,但我需要知道何时启用/禁用这些按钮。我是否应该使用其他一些委托方法来正确收听导航更改?

更新:我还应该注意,移动版Safari正确更新了Facebook移动网站上的后退/前进按钮状态,因此我希望Apple为开发人员提供一种方式来实现这一目标。

enter image description here

1 个答案:

答案 0 :(得分:5)

UIWebViewDelegate似乎根本不支持这一点,WKNavigationDelegate(我刚刚用facebook测试过)也不支持。 this answer中列出了一些选项:

  
      
  1. javascript注入以捕获页面更改(阅读history.pushState)。
  2.   
  3. KVO监视对webview的更改(如滚动视图调整大小)
  4.   
  5. 观看标题更改,如上所述。
  6.   
  7. 每次用户点按视图时都会检查更新。
  8.   

更新

我还在facebook上试过this answer,这涉及在每次新页面加载期间注入javascript以捕获XMLHTTPRequests。 有点做了你所要求的,但有点像黑客。某些facebook标签在一个非常简单的实现中无法正常工作,但您可以解决这些问题。