用了一年wkwebview中遇到的坑

来源:互联网 发布:深圳中科软件 编辑:程序博客网 时间:2024/06/01 10:51

在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();}




原创粉丝点击