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

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐