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" 打不开链接的解决方案

在本机 iOS 中未加载在新窗口或选项卡中打开的链接

WKWebView:表单未在 WKWebView (Swift) 中提交

Boost ASIO,未调用 async_read_some 回调