在 App 内点「加入群组」→ App 里打开了 WhatsApp 网页 → 再点就白屏,WhatsApp 没有被唤起。
同一页面、同一链接,在 Android 版 Yaichi App 内可以正常跳转并入群。
iOS WKWebView 默认不会把 WhatsApp 链接交给系统打开,需要 App 端处理。
在 iOS WebView 放行 WhatsApp 链接(约 10 行代码),或提供「外部打开」JS bridge。




原视频 22 秒(iPhone)。第 11 秒点加入,第 14 秒起白屏。
| 环境 | 结果 |
|---|---|
| iOS · Yaichi App 内 | 白屏,无法跳转 |
| Android · Yaichi App 内 | 正常跳转入群 |
iOS WKWebView 默认只处理 http/https 页面导航:
https://chat.whatsapp.com/…:被当作普通网页在 App 内打开,不会唤起 WhatsApp(对应第 3 步)。whatsapp://:WKWebView 不认识这个 scheme,加载失败 → 白屏(对应第 4 步)。Android 端正常,说明 Android WebView 已经把这类链接交给系统处理;iOS 端需要做同样的处理。
A. 已有 JS bridge?如果 App 已有「用系统 / 外部浏览器打开 URL」的方法,请告诉我们方法名和调用方式,我们在页面里调用即可,无需发版。
B. 修改 iOS WebView:在 decidePolicyFor navigationAction 中,把非 http/https 链接以及 chat.whatsapp.com / wa.me 交给系统打开。需要发新版。
func webView(_ webView: WKWebView,
decidePolicyFor action: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard let url = action.request.url else { return decisionHandler(.allow) }
let scheme = url.scheme?.lowercased() ?? ""
let host = url.host?.lowercased() ?? ""
let externalHosts: Set<String> = ["chat.whatsapp.com", "wa.me", "api.whatsapp.com"]
if !["http", "https", "about", "data", "blob"].contains(scheme) || externalHosts.contains(host) {
UIApplication.shared.open(url)
return decisionHandler(.cancel)
}
decisionHandler(.allow)
}
如果 App 对 window.open / target="_blank" 有单独处理(createWebViewWith),同一规则也需要加上。