问题标签 [sharedarraybuffer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
36 浏览

https - 最近的网络设备浏览器支持 WebAssembly/SharedArrayBuffer?

大约一年前,我为使用 WebAssembly、WebGL 和 WebSockets 的专有视频格式编写了一个视频播放器。在最新版本的 Chrome 之前,它一直运行良好,它禁用 SharedArrayBuffer 支持,除非有一堆与跨站点脚本相关的服务器设置,并且我们使用带有有效 SSL 证书的 HTTPS。与幽灵病毒有关。

问题是我们不是在开发网站。这是一个恰好使用基于 Web 的前端的 LAN 网络设备。为在其私有 LAN 上使用这些设备之一的每个客户购买 SSL 证书似乎是站不住脚的。

(另外,我编写的用于在服务器端支持 WebSockets 的 Java 代码不支持 HTTPS 加密,老实说,我不知道该怎么做,而且加密这个数据流似乎有点过头了。)

在这种情况下,期望开发人员处理 WASM 支持的预期方式是什么?

谢谢。

0 投票
1 回答
98 浏览

javascript - 如何在 Microsoft Edge Javascript 中启用 SharedArrayBuffer

所以前几天,我问了这个关于 javascript webworkers 的问题: Javascript Webworker how to put json information into array buffer。我收到的答案之一是使用 SharedArrayBuffer 在主 javascript 和 webworker 之间共享内存。我知道有一段时间,这在 microsoft edge 上可用,但出于安全考虑,不久前被禁用。我的边缘版本是 96.0.1054.62。有没有办法在浏览器配置或设置中启用共享数组缓冲区?目前,当我尝试使用它时,它说 SharedArrayBuffer 未定义。

0 投票
2 回答
248 浏览

javascript - 如何在没有跨域隔离的情况下在 chrome 中启用 sharedArrayBuffer

我有这个实验,我只在我的本地机器上运行:我加载一个外部网页,例如https://example.com,我用 puppeteer 注入一个 javascript 文件,该文件来自http://localhost:5000.

到目前为止,没有任何问题。但是,这个注入的 javascript 文件加载了一个 WebAssembly 文件,然后我收到以下错误

事实上,SharedArrayBuffer 没有定义(Chrome v96),结果我的代码根本不工作(它曾经工作过)。所以我的问题是,我该如何解决这个错误?

阅读更多关于这个,似乎你可以添加两个标题

我对这两个文件都做了,但没有取得多大成功。鉴于页面来自与注入的 js 和 WASM 文件不同的域,这可能不起作用。

但也许还有其他可能的解决方案。这是我启动 chrome 的命令

我知道 chrome 有太多的选项,所以也许这个 SharedArrayBuffer 问题也有一个选项?

希望有人知道这是如何工作的并且可以帮助我,Thnx 很多!

0 投票
2 回答
209 浏览

javascript - 在 localhost 上启用 SharedArrayBuffer

尝试运行 ffmpeg.wasm 时,我不断收到“未定义 SharedArrayBuffer”错误。看来这是在 Webassembly 方面。无论如何,我知道这是一个可以通过跨源隔离解决的问题。但是,我试图在本地主机上运行它,据我所知,跨源隔离无济于事。我尝试按照本指南底部的说明进行操作,但无济于事。我也尝试过更改 Chrome//flags 的方法,但这也不起作用。我只需要能够在浏览器中运行 ffmpeg/wasm 但有点麻烦。有什么想法吗?

0 投票
1 回答
74 浏览

ffmpeg - 使用 Cypress 时未定义 SharedArrayBuffer

我正在使用 Vite 和 Cypress 进行开发和测试

我正在加载 ffmpeg,它在 Chrome 上加载正常,但在 Cypress 上,它给出了这个错误

显然,这是由跨源隔离引起的。

我尝试禁用网络安全,Cypress.json但没有帮助

示例代码

有解决方法吗?

最小复制 https://github.com/unlocomqx/cypress-ffmpeg

0 投票
0 回答
65 浏览

ios - 在 iOS 上的 Capacitor App 中运行 ServiceWorker

tl;博士

本质上,我需要设置 COOP/COEP 标头以在我的 Capacitor v3 iOS 应用程序中启用 SharedArrayBuffer 功能,并且运行 ServiceWorker 来设置标头是我迄今为止找到的唯一解决方案。

问题的背景

Chrome Android 和 Safari iOS现在都支持 SharedArrayBuffer ,这意味着 Ffmpeg.wasm 可以利用多线程。SharedArrayBuffer 需要一个安全的上下文来启用功能,这是通过设置以下标头来完成的;

进一步的要求;

  • 该站点需要通过 HTTPS 或 localhost 提供服务
  • 标头必须设置在服务器端(标头不能meta http-equiv=".."在 head 标签中设置)

我在 Capacitor 中发现了这个问题来实现。我的应用程序是自包含的(应用程序文件在本地提供),它不需要外部 http 请求来提供应用程序文件。这意味着在服务器端设置所需的标头不是一种选择。

变通解决方案

以下解决方案建议使用 ServiceWorker 在客户端设置 COOP/COEP 标头,这正是我所需要的。在不接触服务器的情况下启用 COOP/COEP

问题

ServiceWorkers 有自己的一套要求,这就是我遇到的问题。

为了在 iOS 上启用这个 ServiceWorker API,我正在使用App-Bound Domains

github Support 中的以下问题将具有电容器的 PWA 部署为本机应用程序概述了在电容器中实现应用程序绑定域所需的步骤。

其中包括;

  • 添加您的域列表,包括。server.hostname / localhost 到 Info.plist。

  • limitsNavigationsToAppBoundDomains在您的 src 中启用-capacitor/capacitor.config.json

设置应用绑定域后,我会出现以下错误;

发生这种情况是因为 Capacitor 应用程序是capacitor://在 iOS 中提供的。

有没有办法解决?(不需要从远程 url 提供服务)。

或者有没有人发现在 Capacitor 中设置 COOP/COEP 标头客户端的更好方法?

谢谢凸轮

0 投票
0 回答
34 浏览

webpack - 如何在 Gatsby 开发环境中为 WebWorker 文件设置 HTTP 标头?

我在基于 Gatsby 的网站中使用 WebWorkers(通过将 Webpack 注入worker-loaderGatsby 的 Webpack 配置)。我想使用SharedArrayBuffer,这需要设置Cross-Origin-Embedder-PolicyHTTP 标头。

有没有办法为 Gatsby 开发环境中的特定文件添加特定的 HTTP 响应标头?

关于文档,developMiddleware可以添加到gatsby-config.js. 不幸的是,这似乎只适用于某些文件类型(生成的 html 页面、页面数据 json 文件和一些图像),但既不适用于 CSS 文件,也不适用于 JS 文件。

我也尝试devServer.headers在 Webpack 配置中注入对象,但 Gatsby 似乎完全忽略了这一点。

编辑:重现问题的代码和我的方法可以在这里找到: https ://github.com/jens-duttke/gatsby-headers-demo