WKWebview 不能打开第三方APP

UIWebview 更换为WKWebview之后发现不能跳转到第三方应用(JD),以前判断的方法就在代理方法做拦截,

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    NSURL *url = [request URL];
///  这个是京东的协议头,判断能否打开,能打开返回NO
    if ([url.absoluteString hasPrefix:@"openapp"]) {
        if([[UIApplication sharedApplication]canOpenURL:url])
        {
            [[UIApplication sharedApplication]openURL:url];
            return NO;
        }
    }

现在更换WKWebview后里面的判断逻辑都放在这个方法里

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{
    NSURL *url = [navigationResponse.response URL];
    
    if ([url.absoluteString hasPrefix:@"openapp"]) {
        if([[UIApplication sharedApplication]canOpenURL:url])
        {
            [[UIApplication sharedApplication]openURL:url];
            decisionHandler(WKNavigationResponsePolicyCancel);
            return;
        }
    }
    

经过测试发现,JD的请求里面没有openapp的协议头,也就导致无法打开JD,是因为decidePolicyForNavigationResponse这个方法里面返回的是请求之后的结果,我们要在请求之前取到结果,那就需要另一个代理方法

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {

     if ([navigationAction.request.URL.scheme containsString:@"openapp"]){
        if([[UIApplication sharedApplication]canOpenURL:navigationAction.request.URL])
        {
            [[UIApplication sharedApplication]openURL:navigationAction.request.URL];
            decisionHandler(WKNavigationActionPolicyCancel);
        
        }else{
            decisionHandler(WKNavigationActionPolicyAllow);
        }
        
    }else{
        decisionHandler(WKNavigationActionPolicyAllow);
    }
}

这个方法是将要加载请求,可以拦截所有的请求信息!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 关于UIWebView的介绍,相信看过上文的小伙伴们,已经大概清楚了吧,如果有问题,欢迎提问。 本文是本系列...
    CoderLF阅读 9,044评论 2 12
  • 通过学习,你将会学习以下几个方面的内容: **什么是WKWebView以及它和UIWebView的区别是什么 **...
    SOI阅读 11,782评论 18 42
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 嘘,夜深了,轻轻说一句晚安。 说话时轻一点,因为小仙女们有时很脆弱,说话声大一点,就觉得很凶了。 她装酷时很认真,...
    卖糖果的小女巫阅读 267评论 0 2
  • 阿杰与阿飞阅读 310评论 0 0