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

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

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

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

【问题讨论】:

    标签: ios swift webview safari wkwebview


    【解决方案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!
    • 我很高兴这在这段时间之后也有帮助:)
    猜你喜欢
    • 2015-08-16
    • 1970-01-01
    • 2020-11-27
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多