用了一年wkwebview中遇到的坑

在ios10中,公司的一些页面一直抽风式的加载不出来,直接报错证书验证失败,和后台调了一天,也没找到是什么原因,于是在wkwebview上试了下,擦了个擦,竟然没有任何问题,带着无奈以及无奈,只好做了一个兼容7.0的uiwebview和8.0以后的wkwebview的浏览器,其中痛苦过程就不再说了,新的wkwebview还要兼容旧的协议,幸好uiwebview的app web交互协议都是自己实现的,只需要做好wkwebview的协议的兼容性就好。以为就会顺利的,高高兴兴的,愉快的用wkwebview了,然后就上线了,然后就出现了一些崩溃,幸亏只是偶先,一个版本一个版本的修复。

1 打开新的页面 _target = blank 在打开新的页面的时候,需要自己处理怎么处理,如果不对blank便签处理,程序会崩溃
处理方式:
- (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
{
    WKFrameInfo *frameInfo = navigationAction.targetFrame;
    if (![frameInfo isMainFrame]) {
        [webView loadRequest:navigationAction.request];
    }
    return nil;
}


2 长按图片存储图片 在wkwebview中,长按图片可以弹出一个是存储还是复制的框,如果不对相应的JS代码做处理,会引起崩溃,可以直接禁用长按功能
//禁止长按弹出选择框
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation
{
    [self.swipeWebView evaluateJavaScript:@"document.documentElement.style.webkitTouchCallout='none';" completionHandler:^(id object, NSError * error) {
       
        }];
}


   
3 wkwebview无法主动打开appstore 解决方法如下
- (void)swipewebView:(WKWebView *_Nullable)webView decidePolicyForNavigationAction:(WKNavigationAction *_Nullable)navigationAction decisionHandler:(void (^_Nullable)(WKNavigationActionPolicy))decisionHandler
{
   
    self.homeH5RightShareView.hidden = YES;
   
    if ([navigationAction.request.URL.scheme isEqualToString:@"file"]||[navigationAction.request.URL.scheme isEqualToString:@"tel"]||[navigationAction.request.URL.scheme isEqualToString:@"about"]) {
        decisionHandler(WKNavigationActionPolicyCancel);
        return;

    }
   
    self.origionalAddressStr = navigationAction.request.URL.absoluteString;
    lastRuestUrlString = navigationAction.request.URL.absoluteString;
   
    WKNavigationActionPolicy policy =WKNavigationActionPolicyAllow;
   
   
    if([[navigationAction.request.URL host] isEqualToString:@"itunes.apple.com"] &&
       
        [[UIApplication sharedApplication] openURL:navigationAction.request.URL])
    {
       
        policy =WKNavigationActionPolicyCancel;
       
    }
   
    decisionHandler(policy);
}



4 alert弹出 在webview里面,alert() 弹出框不需要进行任何处理,在wkwebview里面 需要在app实现 不然会崩溃
//alert view 弹出
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler
{
    UIAlertView * alter = [[UIAlertView alloc] initWithTitle:message message:nil delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
    [alter show];
    completionHandler();
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值