乐于分享
好东西不私藏

iOS中WKWebView处理跳转target="_blank"链接失败问题处理

iOS中WKWebView处理跳转target="_blank"链接失败问题处理
哈喽,新年第一篇,先给大家送上马年祝福
祝大家马年行大运,马上来财,左来财,右来财,东南西北都安排
在iOS中,加载Web页面非常常见,跳转也非常多,但是当使用a标签进行页面跳转时,点击a标签跳转页面,无响应,有一个原因就是因为WKWebView默认不处理 target="_blank" 的链接
如H5代码:
<ahref="https://www.baidu.com"  onclick="handleSearch1('点击百度')"   target="_blank">百度</a>
iOS代码:
//页面开始加载时代理方法- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{    decisionHandler(WKNavigationActionPolicyAllow);    return;}- (WKWebView *)webView{    if (!_webView) {        WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc]init];        config.userContentController = [[WKUserContentController alloc] init];        CGRect rect = CGRectMake(00, kSCREEN_WIDTH, kSCREEN_HEIGHT);        if (self.isHasNavigate) {            if (self.isBottomSafety) {                rect = CGRectMake(0, navigationBarHeight, kSCREEN_WIDTH, kSCREEN_HEIGHT - navigationBarHeight-XBottomHeight);            }else{                rect = CGRectMake(0, navigationBarHeight, kSCREEN_WIDTH, kSCREEN_HEIGHT - navigationBarHeight);            }        }        _webView = [[WKWebView alloc] initWithFrame:rect configuration:config];        if (@available(iOS 11.0*)) {            _webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;        } else {            self.edgesForExtendedLayout = UIRectEdgeNone;        }        _webView.scrollView.bounces = NO;        _webView.scrollView.showsVerticalScrollIndicator = NO;        _webView.navigationDelegate = self;        _webView.UIDelegate = self;        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:BXUrl(self.loadURL) cachePolicy:(NSURLRequestReloadIgnoringLocalCacheData) timeoutInterval:30.f];        [_webView loadRequest:request];    }    return _webView;}
解决方案:
//页面开始加载时代理方法- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{    NSURL *url = navigationAction.request.URL;    // 允许所有主 frame 导航    if (navigationAction.targetFrame.isMainFrame) {        decisionHandler(WKNavigationActionPolicyAllow);        return;    }    // 拦截非主 frame(_blank)请求,在当前 WebView 加载    [webView loadRequest:navigationAction.request];    decisionHandler(WKNavigationActionPolicyCancel);}