WKWebView拦截URL

作者: 上冬十二 | 来源:发表于2017-05-31 17:41 被阅读653次

    本文介绍使用WKWebView拦截url进行原生界面跳转

    3.gif
    • 使用代理方法decidePolicyForNavigationAction
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
        // 获取完整url并进行UTF-8转码
        NSString *strRequest = [navigationAction.request.URL.absoluteString stringByRemovingPercentEncoding];
        if ([strRequest hasPrefix:@"app://"]) {
            // 拦截点击链接
            [self handleCustomAction:strRequest];
            // 不允许跳转
            decisionHandler(WKNavigationActionPolicyCancel);
        }else {
            // 允许跳转
            decisionHandler(WKNavigationActionPolicyAllow);
            
        }
    }
    
    • 自定义方法传过来url进行判断,需要html元素本身就有跳转链接,才可以拦截,如没有,拦截不到。下文app://xxx链接为自定义链接
    - (void)handleCustomAction:(NSString *)URL
    {
        // 判断跳转
        NSString *link_id = @"";
        if ([URL hasPrefix:@"app://video"]) {
            // 视频
            MMLog(@"点击了视频%@",link_id);
        }else if ([URL hasPrefix:@"app://item"]) {
            // 单品
            MMLog(@"点击了单品%@",link_id);
        }else if ([URL hasPrefix:@"app://brand"]) {
            // 品牌
            link_id = [URL substringFromIndex:[NSString stringWithFormat:@"app://brand"].length];
            MMLog(@"点击了品牌%@",link_id);
        }
    }
    

    附上我的博客链接:oragekk'Blog 欢迎留言-不过评论系统换成了disqus需要搭梯子哦

    相关文章

      网友评论

      • 丸子_f396:您好,我使用这个方法,只能拦截到当前网页的URL,拦截不到点击html 网页中按钮的url,请问是什么原因;
        上冬十二:你可以询问一下你们H5的开发人员,这个方法是可以拦截到<a></a>标签的,如果按钮点击是使用Ajax的异步请求,是拦截不到的。因为url并没有发生变化
      • 在没老之前:大神,你好?我使用这个放来拦截url,但是只要打开这个方法,我们公司前端写的http网页就加载失败,为什么?

      本文标题:WKWebView拦截URL

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