嵌入Cordova WebView使用自定义scheme时CDVURLSchemeHandler未调用无法加载页面
问题排查与遗漏配置清单
1. 检查WKWebView自定义Scheme注册时机
WKWebView要求WKURLSchemeHandler必须在WKWebView实例初始化之前注册到configuration中,初始化完成后再注册的handler即使通过urlSchemeHandlerForURLScheme查询返回非空,也不会触发任何回调方法。
你需要确认CDVURLSchemeHandler的注册逻辑执行时机早于WKWebView的实例化步骤。
2. 补充Cordova白名单配置
Cordova默认会拦截未加入白名单的导航请求,直接跳转about:blank,不会将请求传递给WKWebView的scheme handler。你需要在config.xml中添加以下配置:
<access origin="app://*" /> <allow-navigation href="app://localhost/*" />
3. 确认开启WKWebViewOnly配置
Cordova iOS 6.x版本如果未显式开启WKWebViewOnly,会残留部分UIWebView兼容逻辑,干扰自定义scheme的处理流程,需要在config.xml中添加:
<preference name="WKWebViewOnly" value="true" />
4. 检查CDVURLSchemeHandler实例引用有效性
WKWebView对注册的WKURLSchemeHandler是弱引用,如果CDVURLSchemeHandler实例注册后没有被强引用持有,会被系统自动回收,导致回调无法触发。你可以在handler的dealloc方法加断点,确认加载请求阶段handler实例是否还存活。
5. 移除不必要的CFBundleURLTypes配置
Info.plist中配置的CFBundleURLTypes是用于系统级跨App跳转的scheme注册,和WKWebView内部的自定义scheme处理无关,反而可能导致系统提前拦截app://前缀的请求,不会传递到WebView内部,可以暂时删除这段配置验证。
内容的提问来源于stack exchange,提问作者alekop
相关产品推荐
相关产品推荐

