WKWebView没有打开SOME target =“_ blank”链接

时间:2015-08-12 04:10:46

标签: html ios wkwebview

我已经实施了已接受的解决方案here,但确实有效 一些网站。例如:访问www.tomcruise.com并点击他的预告片。每个链接都有target =“_ blank”,并在实现先前链接的堆栈溢出帖子中建议的解决方案后开始打开。

但现在我发现,如果我们转到here并点击任何链接(我试过的那个,在写这个问题时,有一个href标签,如下所示

 <a rel="nofollow" target="_blank" href="http://www.nowmagazine.co.uk/celebrity-news/victoria-and-david-beckham-fighting-to-be-together-296082" class="ot-anchor aaTEdf" jslog="10929; track:click" dir="ltr">http://www.nowmagazine.co.uk/celebrity-news/victoria-and-david-beckham-fighting-to-be-together-296082</a>

当我从WKWebView内部点击此链接时,下面的WKUIDelegate方法会被调用,但是有了navigationAction.request =“”,因此当调用webView.loadRequest(“”)时没有任何反应。其他人都面临这个问题?

  optional func webView(_ webView: WKWebView, createWebViewWithConfiguration configuration: WKWebViewConfiguration,
       forNavigationAction navigationAction: WKNavigationAction,
            windowFeatures windowFeatures: WKWindowFeatures) -> WKWebView?{
      if navigationAction.targetFrame == nil {
          webView.loadRequest(navigationAction.request)
      }

      return nil
}
  • 上面指定的href标记有什么特别之处,导致使用空url调用WKUIDelegate方法?
  • 我们如何解决这个问题?让我知道你是如何导致这个问题的,因为我也对调试感兴趣。

1 个答案:

答案 0 :(得分:1)

我希望我可以使用WKWebView委托方法解决它,但我无法弄明白。

所以我在完成网页加载后去了UIWebView时代运行javascript函数的解决方案

func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
    let jsCode = "var allLinks = document.getElementsByTagName('a');if (allLinks) { var i;for (i=0; i<allLinks.length; i++) {var link = allLinks[i];var target = link.getAttribute('target');if (target && target == '_blank') {link.setAttribute('target','_self');} } }"
    webView.evaluateJavaScript(jsCode, completionHandler: nil)
}

这解决了点击任何google plus帖子页面中的链接导致正在加载空白页面的问题

2015年11月3日更新:问题中解释的现象在Swift 2.0代码中不再适用于我。因此,您应该能够将here提供的解决方案用于所有目的