防止在WKWebView` /`UIWebView`中打开通用链接

时间:2016-07-19 05:57:15

标签: ios uiwebview wkwebview

当用户点击WKWebView中的通用链接时,相应的应用将会被打开(如果已安装)。

Apple Search Programming Guide

中对此进行了描述
  

如果您实例化SFSafariViewController,WKWebView或UIWebView对象以处理通用链接,iOS将在Safari中打开您的网站,而不是打开您的应用程序。但是,如果用户从嵌入式SFSafariViewController,WKWebView或UIWebView对象中点击通用链接,iOS将打开您的应用程序。

在我的应用中,我有WKWebView,但我不希望用户退出我的应用。我想处理WKWebView中的链接。

如何阻止通用链接打开?或者我可以知道其他应用程序是否可以处理URL?

4 个答案:

答案 0 :(得分:8)

WebKit的源代码:

static const WKNavigationActionPolicy WK_API_AVAILABLE(macosx(10.11), ios(9.0)) _WKNavigationActionPolicyAllowWithoutTryingAppLink = (WKNavigationActionPolicy)(WKNavigationActionPolicyAllow + 2);

如果您使用的是WKWebView,请使用WKNavigationActionPolicyAllow + 2代替WKNavigationActionPolicyAllow

答案 1 :(得分:1)

+ [LSAppLink openWithURL:completionHandler:] 这是通用链接如何打开相应的应用程序。 你可以用自己的方法交换它的实现 但要小心,这是私有API。

您可以查看LSAppLink头文件here

答案 2 :(得分:1)

基于@none的回答,这里是Swift 4的一个例子

我已对它进行过测试,确实有效!

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    decisionHandler(WKNavigationActionPolicy(rawValue: WKNavigationActionPolicy.allow.rawValue + 2)!)
}

答案 3 :(得分:0)

你可以试试吗?

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    decisionHandler(WKNavigationActionPolicy(rawValue: WKNavigationActionPolicy.allow.rawValue + 2)!)
}