我有一个有wkwebview的应用程序。我需要帮助的是当用户点击webview中的链接时,它会在Safari中打开。但是,如果他们点击具有相同域的链接,则会在webview中打开。
例如。如果webview打开apple.com并且用户点击打开apple.com/iphone的链接,我希望它在webview中打开。但是,如果他们点击打开google.com的链接,我希望它在Safari应用程序中打开。你能给我一些代码,以便我可以实现吗?
(这是使用swift 3的iOS应用程序)
答案 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)
}
}