美文网首页iOS Developer
H5页面不响应WebView代理方法

H5页面不响应WebView代理方法

作者: 這Er | 来源:发表于2017-03-23 23:01 被阅读401次

    问题

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

    a标签的代码

    (a标签的事件已经被拦截,网页使用的是vue)
    <a class="activity-item-wrapper" href="/activity-detail/588425470926a819f7b8d61d">  </a>
    

    曲线救国

    虽然代理方法不会响应,但是经过尝试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代理方法

        本文链接:https://www.haomeiwen.com/subject/jhobnttx.html