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 到不同应用程序的重定向的主要内容,如果未能解决你的问题,请参考以下文章
从使用 wkwebview 返回值的 javascript 调用 swift 函数