簡體   English   中英

防止在WKWebView` /`UIWebView`中打開通用鏈接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM