Whitelist白名单问题导致访问网络资源失败的解决
文章目录
一、前言
自 Cordova Android 8.0 版本起,cordova-plugin-whitelist 插件的功能已经被弃用,在目前最新版本Cordova Android12.0.1或者更高版本中,要安装它(无论是plugin add还是在config.xml中配置),都会提示:
原因是新版本的Android系统出于安全考虑,采用了更严格的安全策略,如CORS(跨源资源共享)和清单文件中的网络权限控制策略。
一、解决方案
因此,对于涉及跨域访问或对internet资源访问时,可采用下述方法解决:
1.在html的meta中定义安全策略
使用Content Security Policy (CSP),在你的Cordova项目(或需要安全访问)的index.html文件中,设置Content Security Policy(CSP)来控制哪些外部资源可以被加载。
例如,
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://example.com; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:;">
这个例子中,页面资源内容可以访问:
(1)default-src
来自:自身(‘self’)、data协议、gap协议,网址https://example.com,如果是多个网址,可以在examplt.com后空格分隔,继续添加,例如:
content="default-src 'self' data: https://ssl.gstatic.com https://api.github.com/search/repositories;"
(2)style-src和script-src
样式和内联脚本也被允许可来自自身(”self")
(3)img-src
图片加载规则可来自自身(”self")和data协议。
2.配置AndroidManifest.xml
如果你需要允许应用访问特定的网络地址,可以在platforms/android/app/src/main/AndroidManifest.xml文件中手动添加网络权限。例如,允许应用访问互联网:
<uses-permission android:name="android.permission.INTERNET" />
3.cordova中使用替代插件cordova-plugin-advanced-http
该插件提供了与http服务器交互的安全策略,支持ios、android和browse
详见:npmjs.com/package/cordova-plugin-advanced-http