gpt4 book ai didi

javascript - 有没有办法在 Android Webview(使用 CSP)上为 WebWorker 启用 fileuri 访问?

转载 作者:行者123 更新时间:2023-11-30 19:16:29 26 4
gpt4 key购买 nike

我在 Firefox/Chrome/Android Webview 上有一个现有的开源消息传递 Web 应用程序,它已被最近的 CSP 3 安全更改破坏。

在 Firefox/Chrome 上可以通过调整 about:config security.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 移动到从服务器加载,但这不是真正的解决方案,因为它确实不可维护。还有什么我可以尝试的吗?谢谢!

最佳答案

最终问题不在CSP。如果在没有 TLS 的情况下运行 WebSocket 连接,Android 9 或更高版本需要特定的 android:usesCleartextTraffic="true" 设置。

此外,可以使用 Android WebView WebSettings 启用 fileuri 访问。它默认由 Cordova 完成。

关于javascript - 有没有办法在 Android Webview(使用 CSP)上为 WebWorker 启用 fileuri 访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57934973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com