WKWebView 未打开 SOME target="_blank" 链接
Posted
技术标签:
【中文标题】WKWebView 未打开 SOME target="_blank" 链接【英文标题】:WKWebView not opening SOME target="_blank" links 【发布时间】:2015-08-12 04:10:46 【问题描述】:我已经实施了公认的解决方案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标签有什么特殊之处导致WKUIDelegate方法被空url调用?
我们如何解决这个问题?让我知道您是如何导致问题的,因为我也对调试感兴趣。
【问题讨论】:
对我来说,您使用的解决方案有效。也适用于您链接到的 google plus 页面.. now 杂志链接也适用于我 【参考方案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 提供的解决方案用于您的所有目的
【讨论】:
我有类似的问题,但你的解决方案对我不起作用,我是 JS 新手,请你看看我面临的问题:***.com/questions/59862536/…> 感谢 - Swift 5.3、ios14、2020 - 此代码仍然有效。愚蠢的 WKWebView 又坏了。以上是关于WKWebView 未打开 SOME target="_blank" 链接的主要内容,如果未能解决你的问题,请参考以下文章
iOS14,WKWebView 无法打开带有 _blank 目标的链接
WKWebview 在 macOS 上的默认浏览器中打开目标 =“_blank”链接
wkwebview a target="_blank" 打不开链接的解决方案