在 Safari 中打开其他网站的 WKWebView 链接
Posted
技术标签:
【中文标题】在 Safari 中打开其他网站的 WKWebView 链接【英文标题】:Open WKWebView links for other websites in Safari 【发布时间】:2016-12-20 14:13:50 【问题描述】:我有一个具有 wkwebview 的应用程序。我需要帮助的是当用户单击 webview 中的链接时,它会在 Safari 中打开。但是,如果他们单击具有相同域的链接,它将在 web 视图中打开。
例如。如果 webview 打开 apple.com 并且用户单击打开 apple.com/iphone 的链接,我希望它在 webview 中打开。但是,如果他们点击打开 google.com 的链接,我希望它在 safari 应用程序中打开。你能给我一些代码让我实现吗?
(这是一个使用 swift 3 的 ios 应用)
【问题讨论】:
【参考方案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! 我很高兴这在这段时间之后也有帮助:)以上是关于在 Safari 中打开其他网站的 WKWebView 链接的主要内容,如果未能解决你的问题,请参考以下文章