在 Safari 中打开其他网站的 WKWebView 链接

Posted

技术标签:

【中文标题】在 Safari 中打开其他网站的 WKWebView 链接【英文标题】:Open WKWebView links for other websites in Safari 【发布时间】:2016-12-20 14:13:50 【问题描述】:

我有一个具有 wkwebview 的应用程序。我需要帮助的是当用户单击 webview 中的链接时,它会在 Safari 中打开。但是,如果他们单击具有相同域的链接,它将在 web 视图中打开。

例如。如果 webview 打开 apple.com 并且用户单击打开 apple.com/iphone 的链接,我希望它在 webview 中打开。但是,如果他们点击打开 google.com 的链接,我希望它在 safari 应用程序中打开。你能给我一些代码让我实现吗?

(这是一个使用 swift 3 的 ios 应用)

【问题讨论】:

【参考方案1】:

在您的WKNavigationDelegate 中实现webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)。在那里,您可以检查所选链接的主机是否与您的初始请求相同。如果没有,您通过UIApplication.shared.open(url) 打开链接并使用.cancel 执行决策处理程序 - 这样链接就不会加载到您的 Web 视图中。否则就允许...

快速而肮脏的版本是(Swift 4):

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) 
  if navigationAction.navigationType == .linkActivated  
    if let url = navigationAction.request.url, 
       originalHost != url.host, UIApplication.shared.canOpenURL(url) 
      UIApplication.shared.open(url)
      decisionHandler(.cancel)
     else 
      decisionHandler(.allow)
    
   else 
    decisionHandler(.allow)
  

【讨论】:

我知道这已经有几年了,但这只是救了我的命。谢谢,@orschaef! 我很高兴这在这段时间之后也有帮助:)

以上是关于在 Safari 中打开其他网站的 WKWebView 链接的主要内容,如果未能解决你的问题,请参考以下文章

在 UIWebView 中作为 Safari 打开网站?

强制用户仅在 ios Safari 中打开我的网站

打开网页提示:欺骗性网站警告

如何在 safari 浏览器中直接打开 webapp?

网站在Safari中无法正常显示

从app中的Safari链接打开safari