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

我已经在这里实施了接受的解决scheme,并且对一些网站有效。 例如:访问www.tomcruise.com并点击他的预告片。 每个链接都有target =“_ blank”,并且在实现之前链接的堆栈溢出post中提出的解决scheme后开始打开。

但现在我发现,如果我们到这里 ,点击任何链接(我试过的那个,写下这个问题的时候,有一个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标签是什么特殊的,导致WKUIDelegate方法被调用一个空的url?
  • 我们如何解决这个问题? 让我知道你是如何造成这个问题,因为我也有兴趣进行debugging。

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

所以我去了UIWebView时代的网页加载完成后运行一个JavaScript函数的解决scheme

 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) } 

这解决了在任何谷歌加贴文页面上点击链接导致加载空页面的问题


2015年11月3日更新:在问题中解释的现象,不再发生在我的Swift 2.0代码。 所以,你应该能够使用这里提出的解决scheme为你的所有目的