H5页面不响应WebView代理方法

问题

在项目中接入了WKWebView,在调试网页的过程中碰到一个问题:
在点击a标签的时候,不会触发webView的navigationDelegate代理方法,如:
webView:decidePolicyForNavigationAction:decisionHandler:
webView:decidePolicyForNavigationResponse:decisionHandler:等等,
原本我是在网页加载完成后更新下网页的返回按钮的,这下不起作用了。

a标签的代码

(a标签的事件已经被拦截,网页使用的是vue)
  

曲线救国

虽然代理方法不会响应,但是经过尝试canGoBack这个属性的值还是会随着页面的变化而变化的,所以我直接监听这个属性,也可以达到我想要的效果

[self.webView.realWebView addObserver:self forKeyPath:@"canGoBack" options:NSKeyValueObservingOptionNew context:nil];

为什么会出现这种问题

经过请教我司前端的同学后,了解到原网页使用的是H5的History Api,应该是在不刷新页面的情况下切换Url,导致WKWebView没有Call代理方法,但是canGoBack和canGoForward属性是可以检测到的。现在H5的体验越来越好,许多SPA应用都是采用的这种方法。

大概流程:

  1. 在A页面 通过发AJAX请求 请求页面中的B数据。
  2. 在页面A中通过JS装载相应的信息到相应的位置来。
  3. 通过History API在不刷新页面的情况下在浏览器的地址栏中从页面A的URL地址切换到页面B的URL地址。

你可能感兴趣的:(H5页面不响应WebView代理方法)