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