UIWebView&WKWebView拦截页面地址变更失败问题解决

需求:项目中添加展示了H5页面,需要根据页面地址判断展示或隐藏原生按钮

个人习惯使用UIWebView,对于这种情况的常规操作是使用代理-(BOOL)webView:(UIWebView )webView shouldStartLoadWithRequest:(nonnull NSURLRequest )request navigationType:(UIWebViewNavigationType)navigationType

但是!!!

木有走断点啊,这就很头疼了

经过查看网络状况及数据线是否断连情况都没有发生的情况下,皱了会眉,叹了口气,将UIWebView更换至WKWebView

同样添加代理- (void)webView:(WKWebView )webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler

呵呵,依然没走断点,H5链接放到浏览器查看,在点击内部按钮时,页面确实发生了变化。。。无奈,只能寻求广大网友的帮助了,大部分指导与我上边的操作一样,可我不是想知道方法里边怎么写,我是想知道它为什么不走那方法啊

直到组长大大询问完成情况,发现我依然在这个坑里没出去的时候。。。嗯,我觉着可能对我很无语,,然后给我发了一堆她查到的链接,我一篇一篇的过,,终于在倒数第二的链接上找到了解决办法

对WKWebView添加事件监听,注意,是WKWebView,,UIWebView我试过了,加监听也不好使

具体为:

[_wkWebView addObserver:self forKeyPath:@"URL" options:NSKeyValueObservingOptionNew context:nil];

- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context {

    if([keyPathisEqualToString:@"URL"]) {

        NSString* url = [NSStringstringWithFormat:@"%@", change[@"new"]];

        //根据url判断按钮的显示和隐藏

    }

}

另外学到一招,如果想添加H5加载进度条的话,可以使用同样的监听方法,监听事件为‘estimatedProgress’

最后,一定要记得取消监听

- (void)dealloc {

    [_wkWebView removeObserver:self forKeyPath:@"URL"];

}

附加帮助解决问题的文档链接:https://blog.csdn.net/jia12216/article/details/80527509

你可能感兴趣的:(UIWebView&WKWebView拦截页面地址变更失败问题解决)