Swift:在Safari中打开webview中的所有外部链接,而不是在webview中

时间:2017-11-02 17:44:39

标签: ios swift safari uiwebview wkwebview

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

这是我在swift中打开webview的代码:

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

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

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

2 个答案:

答案 0 :(得分:0)

使用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
}

答案 1 :(得分:0)

您可以在WKNavigationDelegate上实施webView:decidePolicyForNavigationAction:decisionHandler:。将WKNavigationActionPolicyAllow返回到与您的"内部"匹配的网址的完成处理程序域名,以及WKNavigationActionPolicyCancel用于不包含的域名,并处理要在Safari中加载的网址。