防止通用链接在`WKWebView`/`UIWebView`中打开
Prevent universal links from opening in `WKWebView`/`UIWebView`
当用户点击 WKWebView
中的通用 link 时,将打开相应的应用程序(如果已安装)。
这在Apple Search Programming Guide
中有描述
If you instantiate a SFSafariViewController, WKWebView, or UIWebView object to handle a universal link, iOS opens your website in Safari instead of opening your app. However, if the user taps a universal link from within an embedded SFSafariViewController, WKWebView, or UIWebView object, iOS opens your app.
在我的应用程序中,我有一个 WKWebView
,但我不希望用户退出我的应用程序。我想在 WKWebView
.
中处理 link
如何防止通用 link 打开?或者我可以知道 URL 是否可以由其他应用程序处理吗?
+[LSAppLink openWithURL:completionHandler:]
这就是通用link打开相应应用程序的方式。
你可以用自己的方法交换它的实现
但要小心,这是私人的 API.
你可以查看LSAppLink头文件here
WebKit 源代码:
static const WKNavigationActionPolicy WK_API_AVAILABLE(macosx(10.11), ios(9.0)) _WKNavigationActionPolicyAllowWithoutTryingAppLink = (WKNavigationActionPolicy)(WKNavigationActionPolicyAllow + 2);
如果您使用 WKWebView
,只需使用 WKNavigationActionPolicyAllow
+ 2 而不是 WKNavigationActionPolicyAllow
根据@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)!)
}
当用户点击 WKWebView
中的通用 link 时,将打开相应的应用程序(如果已安装)。
这在Apple Search Programming Guide
中有描述If you instantiate a SFSafariViewController, WKWebView, or UIWebView object to handle a universal link, iOS opens your website in Safari instead of opening your app. However, if the user taps a universal link from within an embedded SFSafariViewController, WKWebView, or UIWebView object, iOS opens your app.
在我的应用程序中,我有一个 WKWebView
,但我不希望用户退出我的应用程序。我想在 WKWebView
.
如何防止通用 link 打开?或者我可以知道 URL 是否可以由其他应用程序处理吗?
+[LSAppLink openWithURL:completionHandler:] 这就是通用link打开相应应用程序的方式。 你可以用自己的方法交换它的实现 但要小心,这是私人的 API.
你可以查看LSAppLink头文件here
WebKit 源代码:
static const WKNavigationActionPolicy WK_API_AVAILABLE(macosx(10.11), ios(9.0)) _WKNavigationActionPolicyAllowWithoutTryingAppLink = (WKNavigationActionPolicy)(WKNavigationActionPolicyAllow + 2);
如果您使用 WKWebView
,只需使用 WKNavigationActionPolicyAllow
+ 2 而不是 WKNavigationActionPolicyAllow
根据@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)!)
}