• iOS wkwebview点击下载链接跳转Safari失败


    前段时间做了一个网页下载的功能,需求是这样的,点击原生页面一个按钮然后打开wkwebview,在此H5页面填写信息,点击提交按钮跳转到下一个H5页面,这个H5页面有个下载按钮,点击下载按钮没有反应。

    就是这么个情况,然后先解决呗,一顿百度,找到这些资料

    -(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
       
        if(webView != self.webView) {
            
            decisionHandler(WKNavigationActionPolicyAllow);
            
            return;
            
        }
        NSURL  * url = navigationAction.request.URL;
        UIApplication *app = [UIApplication sharedApplication];
        
        
    //    appstorte
        if ([url.absoluteString containsString:@"itunes.apple.com"])
            
        {
            
            if ([app canOpenURL:url])
                
            {
                
                [app openURL:url options:@{} completionHandler:^(BOOL success) {
                    
                }];
                decisionHandler(WKNavigationActionPolicyCancel);
                
                return;
                
            }
            
        }
        if (!navigationAction.targetFrame.isMainFrame) {
            [self.webView loadRequest:navigationAction.request];
        }
    //    appstore的外的包
        if ([url.absoluteString containsString:@"itms-services://"]) {
            [app openURL:url options:@{} completionHandler:^(BOOL success) {
                
            }];
            decisionHandler(WKNavigationActionPolicyCancel);
            return;
        }
        decisionHandler(WKNavigationActionPolicyAllow);
        
    }

    然并卵。。。。。

    但是这些资料也指出了一个解决问题的点,到下载的时候H5 链接是一定包含这个字段的 “

    itms-services://

    但是这个链接又不是一个网页,跳转不过去的,那么能不能找到这个链接前的一个H5页面呢?答案是当然可以,所以解决了

    先设置属性用来保存H5地址

    @property (nonatomic, copy) NSString *strWithNetURL;

    wkwebview有个代理方法,这个方法是每次网页请求完才会调用,如果请求失败就不会调用,所有用来保存最后一次正常的网页再好不过

    #pragma mark - 在响应完成时,调用的方法。如果设置为不允许响应,web内 容就不会传过来
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{
        
        NSLog(@"收到响应%@",navigationResponse.response.URL.absoluteString);
        
        self.strWithNetURL = navigationResponse.response.URL.absoluteString;
        
        //允许跳转
        decisionHandler(WKNavigationResponsePolicyAllow);
        
        //不允许跳转
        //decisionHandler(WKNavigationResponsePolicyCancel);
        
    }

    然后就是设置了

    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
        
        NSLog(@"发送请求-----》%@",navigationAction.request.URL.absoluteString);
        
        NSURL *url = navigationAction.request.URL;
        
        UIApplication *application = [UIApplication sharedApplication];
        
        // 获得协议头(可以自定义协议头,根据协议头判断是否要执行跳转)
    //    NSString *scheme = navigationAction.request.URL.scheme;
        
        NSString *string = navigationAction.request.URL.absoluteString;
        
        
        //跳转APPstrong
        if ([string containsString:@"itunes.apple.com"]) {
            [application openURL:[NSURL URLWithString:string]];
            decisionHandler(WKNavigationActionPolicyCancel);
            return;
        }
        
        //跳转到Safari去下载
        if ([string containsString:@"itms-services://"]) {
            [application openURL:[NSURL URLWithString:self.strWithNetURL]];
            // 不允许web内跳转
            decisionHandler(WKNavigationActionPolicyCancel);
            return;
        }
        
        
        // 调用电话
        if ([url.scheme isEqualToString:@"tel"])
        {
            if ([application canOpenURL:url])
            {
                [application openURL:url];
                decisionHandler(WKNavigationActionPolicyCancel);
                return;
            }
        }
        
        decisionHandler(WKNavigationActionPolicyAllow);
        
    }

    诺,解决了

  • 相关阅读:
    快捷定位目录 z武器
    [UOJ317]【NOI2017】游戏 题解
    2-SAT 问题与解法小结
    link-cut-tree 简单介绍
    hihocoder #1456 : Rikka with Lattice(杜教筛)
    杜教筛小结
    BZOJ 2969: 矩形粉刷(期望)
    UVA10294 Arif in Dhaka (群论,Polya定理)
    BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案)
    BZOJ 2683: 简单题(CDQ分治 + 树状数组)
  • 原文地址:https://www.cnblogs.com/qiyiyifan/p/10823612.html
Copyright © 2020-2023  润新知