解决iOS11下Cordova7加载内部Blob报错:Not allowed to load local resource
解决iOS 11上cordova-plugin-iosrtc的Blob加载报错问题
你遇到的Not allowed to load local resource: blob:blobinternal:///错误,本质是iOS 11的WebView安全限制与cordova-plugin-iosrtc内部Blob处理机制的冲突,结合Cordova 7(iOS引擎4.5+)的环境,我给你整理了几个针对性的解决步骤:
1. 调整Content Security Policy(CSP)允许Blob协议
首先修改项目根目录下的config.xml,确保CSP规则允许加载Blob资源:
- 找到
<meta>标签中的content-security-policy配置,在connect-src、img-src、media-src这些指令中添加blob:协议。 - 示例配置:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; media-src 'self' blob:; connect-src 'self' blob:; img-src 'self' blob: data:;">
注意:如果你的项目使用WKWebView,还需要确保CSP没有过度限制本地资源加载。
2. 启用插件的Blob支持偏好设置
在config.xml中添加cordova-plugin-iosrtc的专属偏好配置,强制开启Blob兼容:
<preference name="iosrtcBlobSupport" value="true" />
这个配置会让插件内部调整Blob的创建和URL生成逻辑,适配iOS 11的WebView环境。
3. 适配插件的Blob处理API
确保你在代码中正确使用插件提供的Blob相关方法,而不是原生的Web API:
- 初始化插件时先调用
iosrtc.registerGlobals(),这会替换原生的Blob、MediaStream等对象为插件兼容版本。 - 如果需要将Blob转换为可加载的URL,使用插件的
iosrtc.createObjectURL()方法替代原生的URL.createObjectURL(),避免生成blobinternal://这类被iOS 11拦截的URL。
4. 确保插件和Cordova iOS引擎的版本兼容
- 把cordova-plugin-iosrtc升级到支持iOS 11的最新稳定版本(建议v6.0.0及以上),可以通过以下命令更新:
cordova plugin remove cordova-plugin-iosrtc cordova plugin add cordova-plugin-iosrtc@latest
- 同时确认Cordova iOS引擎版本保持在4.5.5以上(避免旧版本的WebView安全bug),可以用
cordova platform update ios@4.5.5更新。
额外排查点
如果以上步骤还没解决问题,检查:
- 是否在
config.xml中开启了WKWebView?如果是,需要确保插件的iosrtcWKWebViewEnabled偏好设为true:
<preference name="iosrtcWKWebViewEnabled" value="true" />
- 确认iOS 11设备的WebView没有启用额外的安全限制(比如企业级应用的MDM配置)。
内容的提问来源于stack exchange,提问作者Andrej
相关产品推荐
相关产品推荐

