我在 Firefox/Chrome/Android Webview 上有一个现有的开源消息传递 Web 应用程序,该应用程序已被最近的 CSP 3 安全更改破坏。
在 Firefox/Chrome 上可以通过将 about:configsecurity.fileuri.strict_origin_policy
从默认值调整为 false 来避免这种情况。但是,我刚刚注意到 Android 9 Webview 显然强制执行相同的行为,使 Android 应用程序无用,因为它无法加载 Webworker 网络部分。
该应用程序分为 UI 和 Webworker 部分,Webworker 处理网络流量。所有文件都是本地 js 文件,新的 Webworker 由主 UI 加载,具有相对文件路径。它使用“importScripts”加载其他脚本。一切运行良好,设计易于维护,最棒的是应用程序是完全本地的,无需通过网络加载任何内容(当然,实际消息除外)。
但是,随着最近的浏览器版本更新,出现了问题。显然,新的 CSP 安全措施默认情况下不允许加载本地 Webworker 脚本。
我尝试启用不同的 CSP3 webworker-src 选项但没有成功。现在恐怕没有可用的了。
使用带有 CSP 的 Webworker 允许对脚本进行相对文件访问就足够了。
现在看起来像这样:
<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline'; style-src * 'unsafe-inline'; media-src *; img-src 'self' data:; connect-src ws://*;" />
Webworker 是这样加载的:
var webWorker = new Worker('mles-webworker/js/webworker.js');
它在内部加载以下脚本:
importScripts('cbor.js');
该问题显然与 Chrome can't load web worker中描述的基本相同, 除了现在已扩展到 Android Webview。
也许有一个我无法弄清楚的 CSP?允许在相对于主文件的相对位置本地打开文件的东西。
可能我可以移动 Webworker 以从服务器加载,但这不是一个真正的解决方案,因为它实际上是不可维护的。还有什么我可以尝试的吗?谢谢!