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

iFu*_*ger 1 safari webview ios swift wkwebview

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

例如。如果Webview打开apple.com,并且用户单击打开apple.com/iphone的链接,我希望它在Webview内部打开。但是,如果他们单击打开google.com的链接,我希望它在野生动物园应用程序中打开。您能给我一些代码以便我实现吗?

(这是使用Swift 3的iOS应用)

ors*_*aef 6

在您的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)
  }
}
Run Code Online (Sandbox Code Playgroud)