使用wkWebView打开URL和deeplink,但不通过safari
这是关于wkWebview的。我想在我的应用程序中使用wkWebView进行浏览互联网的整个操作,当涉及到深度链接时,我想让它检查手机中的应用程序并打开它(如果有)。我知道我们可以使用UIApplication.shared.canOpenURL和open方法,但我认为如果我使用这些方法,它将首先打开safari,然后让safari完成深层链接的工作。我根本不想在这个案子中涉及狩猎。各位,你们能帮帮我吗?当我使用canOpenURL和Open方法时,有什么方法可以排除safari吗?SetWkWebView委托:使用wkWebView打开URL和deeplink,但不通过safari,safari,swift4,wkwebview,xcode10,Safari,Swift4,Wkwebview,Xcode10,这是关于wkWebview的。我想在我的应用程序中使用wkWebView进行浏览互联网的整个操作,当涉及到深度链接时,我想让它检查手机中的应用程序并打开它(如果有)。我知道我们可以使用UIApplication.shared.canOpenURL和open方法,但我认为如果我使用这些方法,它将首先打开safari,然后让safari完成深层链接的工作。我根本不想在这个案子中涉及狩猎。各位,你们能帮帮我吗?当我使用canOpenURL和Open方法时,有什么方法可以排除safari吗?SetWkW
webView.uiDelegate = self
webView.navigationDelegate = self
然后实现以下方法
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if navigationAction.navigationType == .linkActivated {
if let url = navigationAction.request.url,
let host = url.host, !host.hasPrefix("something whatever you want to handle deeplink"),
UIApplication.shared.canOpenURL(url) {
print(url)
print("No need to open it locally")
decisionHandler(.cancel)
} else {
print("Open it locally")
decisionHandler(.allow)
}
} else {
print("not a user click")
decisionHandler(.allow)
}
}
如果你有任何问题,一定要告诉我 在我的例子中,我通过检查方案实现了这一点。我意识到,当url以“https/http”开头时,如果我们的手机上没有应用程序,它会尝试打开safari。这就是我想要阻止的,这就是为什么我首先检查计划。这样,当url包含http/https时,它将保留在wkwebview上。我用这种方法实现了我的目标,但我总是乐于接受任何建议或改进
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url, let scheme = url.scheme?.lowercased() {
//check the url scheme to bring user to specific apps other than safari
if scheme != "https" && scheme != "http" {
if UIApplication.shared.canOpenURL(url){
// use the available apps in user's phone
UIApplication.shared.open(url)
}
}
}
decisionHandler(.allow)
}
谢谢,这帮助我给出了自己的答案。无论如何,我都会接受这个答案。