美文网首页app开发webviewiOS开发进阶
WKWebView之弹窗提示与拨打电话 - WKWebView踩

WKWebView之弹窗提示与拨打电话 - WKWebView踩

作者: Caiflower | 来源:发表于2016-12-19 20:13 被阅读2914次

    WKWebView默认禁止了一些跳转

    • UIWebView
      打开ituns.apple.com跳转到appStore, 拨打电话, 唤起邮箱等一系列操作UIWebView默认支持的.
    • WKWebView
      默认禁止了以上行为,除此之外,js端通过alert()`弹窗的动作也被禁掉了.
      如何支持呢?
    • 首先要设置WKWebView的WKUIDelegate,并实现以下方法
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
        
        NSURL *URL = navigationAction.request.URL;
        NSString *scheme = [URL scheme];
        UIApplication *app = [UIApplication sharedApplication];
        // 打电话
        if ([scheme isEqualToString:@"tel"]) {
            if ([app canOpenURL:URL]) {
                [app openURL:URL];
                // 一定要加上这句,否则会打开新页面
                decisionHandler(WKNavigationActionPolicyCancel);
                return;
            } 
        }
        // 打开appstore
       if ([url.absoluteString containsString:@"ituns.apple.com"]) {
           if ([app canOpenURL:url]) {
              [app openURL:url];
              decisionHandler(WKNavigationActionPolicyCancel);
            return;
       }
    decisionHandler(WKNavigationActionPolicyAllow);
    }
    
    

    支持alert()

    
    - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler {
        // js 里面的alert实现,如果不实现,网页的alert函数无效
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message
                                                                                 message:nil
                                                                          preferredStyle:UIAlertControllerStyleAlert];
        [alertController addAction:[UIAlertAction actionWithTitle:@"确定"
                                                            style:UIAlertActionStyleCancel
                                                          handler:^(UIAlertAction *action) {
                                                              completionHandler();
                                                          }]];
        
        [self presentViewController:alertController animated:YES completion:^{}];
    
    }
    
    - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler {
        //  js 里面的alert实现,如果不实现,网页的alert函数无效  ,
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message
                                                                                 message:nil
                                                                          preferredStyle:UIAlertControllerStyleAlert];
        [alertController addAction:[UIAlertAction actionWithTitle:@"确定"
                                                            style:UIAlertActionStyleDefault
                                                          handler:^(UIAlertAction *action) {
                                                              completionHandler(YES);
                                                          }]];
        [alertController addAction:[UIAlertAction actionWithTitle:@"取消"
                                                            style:UIAlertActionStyleCancel
                                                          handler:^(UIAlertAction *action){
                                                              completionHandler(NO);
                                                          }]];
        
        [self presentViewController:alertController animated:YES completion:^{}];
        
    }
    

    相关文章

      网友评论

      本文标题:WKWebView之弹窗提示与拨打电话 - WKWebView踩

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