我想使用 WKWebview 打开 App Store 链接。
App Store 链接是指来自 App Store 共享功能的链接。
(例如“https://apps.apple.com/kr/app/apple-music/id1108187390”)
我以为WKWebview可以打开链接,因为这个链接是“https”链接,网络浏览器可以打开这个链接。
但它没有用。
不使用 WKWebViewDelegate 拦截到 UIApplication 的
open
方法,App Store 链接使用“itms”或“itms-apps”方案,WKWebView 不支持。这意味着当用户单击 WKWebView 中的 App Store 链接时,默认行为是尝试在同一视图中打开该链接,但 WKWebView 无法识别自定义方案,也不知道如何处理它。
要从 WKWebView 打开 App Store 链接,您需要使用 WKNavigationDelegate 方法 decidePolicyForNavigationAction 拦截链接点击事件,然后使用 UIApplication 的 open 方法和 App Store 链接的 URL 在 App Store 应用程序中打开它。
这是
decidePolicyForNavigationAction
的示例实现:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard let url = navigationAction.request.url else {
decisionHandler(.allow)
return
}
if url.scheme == "itms-apps" || url.scheme == "itms" {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
decisionHandler(.cancel)
return
}
decisionHandler(.allow)
}
此代码检查导航操作的 URL 是否使用“itms-apps”或“itms”方案,如果是,它会使用
UIApplication.shared.open
方法在 App Store 应用程序中打开链接。如果 URL 使用不同的方案,则允许导航操作在 WKWebView
. 中继续