美文网首页IOS理论知识iOS - WebView
wkwebview 重定向处理新开窗口问题

wkwebview 重定向处理新开窗口问题

作者: 碎梦_aimee | 来源:发表于2019-05-23 15:32 被阅读286次

由于H5网页加载的方式,分为本窗口加载和新开窗口加载的模式,我们日常使用的uiwebview和wkwebview是可以自动跳转本窗口加载的网页,但是新开窗口加载的方式就点击无效,因为H5使用了target="_blank",现在有三种方式可以解决:

方法一:网页里面target的值置为空

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler

{

  if (!navigationAction.targetFrame.isMainFrame) {

      [webView evaluateJavaScript:@"var a = document.getElementsByTagName('a');for(var i=0;i<a.length;i++){a[i].setAttribute('target','');}" completionHandler:nil];

  }

  decisionHandler(WKNavigationActionPolicyAllow);

}

方法二:KNavigationAction 中有两个属性:sourceFrame和targetFrame,分别代表这个action的出处和目标。类型是 WKFrameInfo 。WKFrameInfo有一个 mainFrame 的属性,正是这个属性标记着这个frame是在主frame里还是新开一个frame。

- (void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler

{

     if(navigationAction.targetFrame==nil){

     [webViewloadRequest:navigationAction.request];

    }

    decisionHandler(WKNavigationActionPolicyAllow);

}

方法三:wkwebview 自带的WKUIDelegate代理方法

- (WKWebView*)webView:(WKWebView*)webView createWebViewWithConfiguration:(WKWebViewConfiguration*)configuration forNavigationAction:(WKNavigationAction*)navigationAction windowFeatures:(WKWindowFeatures*)windowFeatures {

    NSLog(@"页面弹出窗口");

    if(!navigationAction.targetFrame.isMainFrame) {

        [webViewloadRequest:navigationAction.request];

    }

    return nil;

}

相关文章

网友评论

    本文标题:wkwebview 重定向处理新开窗口问题

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