使用wkWebView打开URL和deeplink,但不通过safari

使用wkWebView打开URL和deeplink,但不通过safari,safari,swift4,wkwebview,xcode10,Safari,Swift4,Wkwebview,Xcode10,这是关于wkWebview的。我想在我的应用程序中使用wkWebView进行浏览互联网的整个操作,当涉及到深度链接时,我想让它检查手机中的应用程序并打开它(如果有)。我知道我们可以使用UIApplication.shared.canOpenURL和open方法,但我认为如果我使用这些方法,它将首先打开safari,然后让safari完成深层链接的工作。我根本不想在这个案子中涉及狩猎。各位,你们能帮帮我吗?当我使用canOpenURL和Open方法时,有什么方法可以排除safari吗?SetWkW

这是关于wkWebview的。我想在我的应用程序中使用wkWebView进行浏览互联网的整个操作,当涉及到深度链接时,我想让它检查手机中的应用程序并打开它(如果有)。我知道我们可以使用UIApplication.shared.canOpenURL和open方法,但我认为如果我使用这些方法,它将首先打开safari,然后让safari完成深层链接的工作。我根本不想在这个案子中涉及狩猎。各位,你们能帮帮我吗?当我使用canOpenURL和Open方法时,有什么方法可以排除safari吗?

SetWkWebView委托:

 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)
}

谢谢,这帮助我给出了自己的答案。无论如何,我都会接受这个答案。