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

Lir*_*dav 10 uiwebview ios

我注意到[UIWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:]只使用传统<a href="...">链接调用,而不是单页Web应用程序JavaScript导航.

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

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

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

在此输入图像描述

ars*_*ius 5

似乎这根本不是UIWebViewDelegate,也不是WKNavigationDelegate(我刚用facebook测试过)支持的.此答案中列出了一些选项:

  1. javascript注入捕获页面更改(阅读history.pushState).
  2. KVO监视webview的变化(如scrollview大小调整)
  3. 观看标题更改,如上所述.
  4. 每次用户点击视图时检查更新.

更新

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