![](/img/trans.png)
[英]When can I use a SFSafariViewController, WKWebView, or UIWebView with universal links?
[英]Prevent universal links from opening in `WKWebView`/`UIWebView`
当用户点击WKWebView
的通用链接时,将打开相应的应用程序(如果已安装)。
Apple Search Programming Guide中对此进行了描述
如果您实例化SFSafariViewController,WKWebView或UIWebView对象以处理通用链接,iOS将在Safari中打开您的网站,而不是打开您的应用程序。 但是,如果用户从嵌入式SFSafariViewController,WKWebView或UIWebView对象中点击通用链接,iOS将打开您的应用程序。
在我的应用程序中,我有一个WKWebView
,但我不希望用户退出我的应用程序。 我想处理我的WKWebView
的链接。
如何防止通用链接打开? 或者我可以知道其他应用程序是否可以处理URL?
WebKit的源代码:
static const WKNavigationActionPolicy WK_API_AVAILABLE(macosx(10.11), ios(9.0)) _WKNavigationActionPolicyAllowWithoutTryingAppLink = (WKNavigationActionPolicy)(WKNavigationActionPolicyAllow + 2);
如果您使用的是WKWebView
,只需使用WKNavigationActionPolicyAllow
+ 2而不是WKNavigationActionPolicyAllow
+ [LSAppLink openWithURL:completionHandler:]这是通用链接如何打开相应的应用程序。 你可以用自己的方法交换它的实现,但是要小心,这是私有API。
你可以在这里检查LSAppLink头文件
基于@none的回答,这里是Swift 4的一个例子
我测试过它确实有效!
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
decisionHandler(WKNavigationActionPolicy(rawValue: WKNavigationActionPolicy.allow.rawValue + 2)!)
}
你能试试吗?
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
decisionHandler(WKNavigationActionPolicy(rawValue: WKNavigationActionPolicy.allow.rawValue + 2)!)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.