Swift 5 禁用从 WKWebView 到不同应用程序的重定向

Posted

技术标签:

【中文标题】Swift 5 禁用从 WKWebView 到不同应用程序的重定向【英文标题】:Swift 5 Disable Redirection from WKWebView to different Apps 【发布时间】:2021-01-19 20:09:20 【问题描述】:

我的应用程序中有一个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 中做到这一点吗?

【问题讨论】:

【参考方案1】:

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

参考这个answer


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 禁用从 WKWebView 到不同应用程序的重定向的主要内容,如果未能解决你的问题,请参考以下文章

将本地存储从 swift 注入到 WKWebview

从swift注入本地存储到WKWebview

从使用 wkwebview 返回值的 javascript 调用 swift 函数

在 WKWebView 上禁用字体缩放

如何将 swift 对象传递给 javascript (WKWebView / swift)

从 iOS Swift 中的 cam 扫描仪 SDK 返回时,WKwebview 是空白屏幕?