首页 > 解决方案 > Swift 5 禁用从 WKWebView 重定向到不同的应用程序

问题描述

我的应用程序内部有一个WKWebView。问题是,例如,当访问https://stockx.com/de-de并且用户拥有StockX应用程序时,用户会被重定向到该应用程序。有没有办法在我的流派中禁用这种重定向webView?我在这方面找不到任何东西......不太确定你是否需要代码,但这是我的webView

lazy var webView: WKWebView = {
    let webConfiguration = WKWebViewConfiguration()
    let webView = WKWebView(frame: .zero, configuration: webConfiguration)
    webView.uiDelegate = self
    webView.translatesAutoresizingMaskIntoConstraints = false
    return webView
}()

显然,较旧的 Swift 版本有此功能:

func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: ((WKNavigationActionPolicy) -> Void)) {
    print("webView:\(webView) decidePolicyForNavigationAction:\(navigationAction) decisionHandler:\(decisionHandler)")

    let app = UIApplication.sharedApplication()
    let url = navigationAction.request.URL
    let myScheme: NSString = "https"
    if (url!.scheme == myScheme) && app.canOpenURL(url!) {
        print("redirect detected..")
        // intercepting redirect, do whatever you want
        app.openURL(url!) // open the original url
        decisionHandler(.Cancel)
        return
    }

    decisionHandler(.Allow)
}

但这不再适用于Swift 5。知道如何在 Swift 5 中做到这一点吗?

标签: iosswiftwebviewwkwebview

解决方案


所以这里发生的事情是网络应用程序初始化通用链接。理论上你可以做些什么来阻止这个:

参考这个答案


func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: ((WKNavigationActionPolicy) -> Void)) {
        print("webView:\(webView) decidePolicyForNavigationAction:\(navigationAction) decisionHandler:\(decisionHandler)")

        let app = UIApplication.sharedApplication()
        let url = navigationAction.request.URL
        let myScheme: NSString = "https"
        if (url!.scheme == myScheme) && app.canOpenURL(url!) {
            print("redirect detected..")
            // intercepting redirect, do whatever you want
            app.openURL(url!) // open the original url
            decisionHandler(.Cancel)
            return
        }

        decisionHandler(.Allow)
    }


推荐阅读