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

时间:2016-12-20 14:13:50

标签: ios swift webview safari wkwebview

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

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

(这是使用swift 3的iOS应用程序)

1 个答案:

答案 0 :(得分:4)

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)
  }
}