WKWebView 未打开某些目标 =“_blank” 链接
WKWebView not opening SOME target="_blank" links
我已经实施了公认的解决方案 here 并且它确实适用于
一些网站。例如:转到 www.tomcruise.com 并单击他的预告片。这些 link 中的每一个都有 target="_blank" 并在实施之前 linked 堆栈溢出 post 中建议的解决方案后开始打开。
但现在我发现如果我们转到 here 并单击任何 link(我试过的那个,在写这个问题时,有一个 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 中点击这个 link 时,下面的 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?
- 我们如何解决这个问题?让我知道您是如何引起问题的,因为我也对调试感兴趣。
我希望我可以使用 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 加帖子页面中的链接导致加载空白页面的问题
2015 年 11 月 3 日更新:问题中解释的现象在 Swift 2.0 代码中不再发生。因此,您应该能够将 here 提供的解决方案用于您的所有目的
我已经实施了公认的解决方案 here 并且它确实适用于 一些网站。例如:转到 www.tomcruise.com 并单击他的预告片。这些 link 中的每一个都有 target="_blank" 并在实施之前 linked 堆栈溢出 post 中建议的解决方案后开始打开。
但现在我发现如果我们转到 here 并单击任何 link(我试过的那个,在写这个问题时,有一个 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 中点击这个 link 时,下面的 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?
- 我们如何解决这个问题?让我知道您是如何引起问题的,因为我也对调试感兴趣。
我希望我可以使用 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 加帖子页面中的链接导致加载空白页面的问题
2015 年 11 月 3 日更新:问题中解释的现象在 Swift 2.0 代码中不再发生。因此,您应该能够将 here 提供的解决方案用于您的所有目的