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

3
我有一个带有wkwebview的应用程序。我需要帮助的是,当用户在webview内点击链接时,它会在Safari中打开。但是,如果他们点击具有相同域名的链接,则会在webview中打开。
例如,如果webview打开apple.com并且用户单击打开apple.com / iphone的链接,则希望其在webview中打开。但是,如果他们单击打开google.com的链接,则希望它在safari应用程序中打开。你能给我一些代码,这样我就可以实现这个功能吗?
(这是使用swift 3的iOS应用程序)
1个回答

16

在你的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! - leromt
我很高兴这次也能帮上忙 :) - orschaef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接