【问题标题】:Swift: Open all external links within a webview in Safari, NOT in webview [duplicate]Swift:在 Safari 中打开 web 视图中的所有外部链接,而不是在 web 视图中 [重复]
【发布时间】:2017-11-02 17:44:39
【问题描述】:

我写了一个简单的应用程序,它调用了一个 webview(位于 XXXXXX.com/webview.php

这是我的代码,可以快速打开我的网页视图:

if let url = URL(string: "https://www.XXXXXX.com/webview.php") {
    let request = URLRequest(url: url)
    webView.loadRequest(request)
}

现在,此 webview 系统中的所有 内部链接(例如 /webview_subsite2.php)都在此 webview 中打开。那好极了。 但我希望所有 外部链接 (target=_blank) 在 Safari-Browser 中打开。 我怎样才能做到这一点?

我之前的问题被标记为重复,但事实并非如此。 关键是,上面发布的代码不是链接的调用! 这是 webview 的调用。 我的问题涉及如何打开所有外部链接INSIDE this webview,它位于 Safari 中的 XXXXXX.com/webview.php(域被审查),而不是在这个 webview-Frame 内。并且需要快速的解决方案。

【问题讨论】:

    标签: ios swift safari uiwebview wkwebview


    【解决方案1】:

    您可以在 WKNavigationDelegate 上实现webView:decidePolicyForNavigationAction:decisionHandler:。将 WKNavigationActionPolicyAllow 返回到与您的“内部”域匹配的 URL 的完成处理程序,并将 WKNavigationActionPolicyCancel 用于不匹配的 URL,并处理这些 URL 以在 Safari 中加载。

    【讨论】:

      【解决方案2】:

      使用shouldStartLoadWithRequest webView委托方法并检查navigationType.linkClicked类型并在safari中打开链接

      func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
          if navigationType == UIWebViewNavigationType.linkClicked {
              if #available(iOS 10.0, *) {
                  UIApplication.shared.open(request.url!, options: [:])
              } else {
                  UIApplication.shared.openURL(url)
              }
              return false
          }
          return true
      }
      

      【讨论】:

      • 可以说:webview xxxxx.com/webview.php 的源代码是:google.detarget=_blank>google 我想打开这个链接到 Google野生动物园。
      • 这个函数在哪里复制?
      • 在你设置 webview 委托的地方添加这个方法
      猜你喜欢
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 2016-08-07
      • 1970-01-01
      相关资源
      最近更新 更多