问题标签 [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 回答
420 浏览

javascript - 是否可以通过广播通道 API 将 SharedArrayBuffer 广播给 Web Worker?

Broadcast Channel API似乎是postMessageChannel Messaging API(又名MessageChannel )的替代品。我在最近版本的 Google Chrome 中成功地使用了这两者来发送共享数组缓冲区;但是,我无法使用广播通道 API 发送共享数组缓冲区。

Mozilla 在https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel的文档引用了https://html.spec.whatwg.org/multipage/web-messaging.html#broadcastchannel的规范,其中说:

对于目的地中的每个目的地...

  1. 让数据为 StructuredDeserialize(serialized, targetRealm)。如果这引发异常,则捕获它,使用 MessageEvent 在目的地触发名为 messageerror 的事件,并将 origin 属性初始化为 sourceOrigin 的序列化,然后中止这些步骤。

StructuredDeserialize 在https://html.spec.whatwg.org/multipage/structured-data.html#structureddeserialize中定义,似乎暗示它涵盖了 SharedArrayBuffers:

  1. 否则,如果serialized.[[Type]]是“SharedArrayBuffer”,那么:如果targetRealm对应的agent集群没有serialized.[[AgentCluster]],那么抛出“DataCloneError”DOMException。否则,将 value 设置为 targetRealm 中的新 SharedArrayBuffer 对象,其 [[ArrayBufferData]] 内部槽值已序列化。[[ArrayBufferData]] 并且其 [[ArrayBufferByteLength]] 内部槽值已序列化。[[ArrayBufferByteLength]]。

阅读本文,在我看来这应该可行,但我收到一个消息事件,其中数据只是null. 如果这是一个安全问题,我希望得到一个 messageerror 事件而不是 message 事件。

这是我的最小测试用例:

broadcast-test.html(必须从 http 服务器提供 - 不能通过 file:// 工作)

广播-test.js

观察到的控制台输出:(Windows 10 上的 Chrome 84.0.4147.135)

主要收到{你好:“来自工人”}

工人收到空

谷歌浏览器的实现是不正确的,还是我误解了规范?

0 投票
1 回答
368 浏览

webassembly - WebAssembly LinkError: WebAssembly.instantiate(): 内存共享状态不匹配,声明 = 0,导入 = 1

我有一个简单的 c 代码:

将其编译为 wasm:

以下 HTML 工作正常:

但是,如果我设置memoryshared: true

Chrome 显示错误“LinkError:WebAssembly.instantiate():内存共享状态不匹配,声明 = 0,导入 = 1”。

0 投票
1 回答
80 浏览

android - Firefox for Android 82 是否支持 SharedArrayBuffer?

我之前的问题相关,接下来我尝试在 Firefox for Android 82 上使用 SharedArrayBuffer。

我通过 localhost 和 https 服务器都失败了。

Firefox for Android 82 还不支持 SharedArrayBuffer 吗?

文档说 Firefox for Android 从版本 79 开始支持它。那么我该如何修复它?

谢谢。

0 投票
2 回答
2038 浏览

firefox - 如何在 Firefox 中使用 ffmpeg.wasm 而不获取 SharedArrayBuffer?

我正在尝试在反应应用程序中加载 ffmpeg.wasm 来做一个小型视频转换器项目。该代码在 chrome 上运行良好,但在 Firefox 开发版(83.0b)中我发现以下错误:

ReferenceError:未定义 SharedArrayBuffer

这是捕获错误的组件部分(变量 ready 永远不会变为 true):

在此先感谢,让我知道是否应该提供更多详细信息。

0 投票
0 回答
45 浏览

javascript - 是否存在由工作线程填充的阻塞 ArrayBuffer?

我想使用ion-js,但它是字符串或 ArrayBuffers 上的同步库,而不是 Stream 或 ReadableStream。

我想使用 worker_threads、SharedArrayBuffer 和 Atomics 来创建一个填充在后台线程中并阻塞等待字节的 ArrayBuffer。

有一个未显示的工作线程读取流并更新支持 dataBuffer 和 availableBytes 的两个共享数组缓冲区。

当我直接调用 slice 时,这实际上有效。

但是,当我用类型化数组包装阻塞数组时它不起作用

0 投票
0 回答
121 浏览

javascript - Google 系统最近检测到 SharedArrayBuffers

我最近从 Google 收到了以下这条消息。它说我正在使用 SharedArrayBuffers 但我不知道它们是什么。有没有办法确定我是否使用他们所说的我?我正在做的唯一类型的跨域工作是在 iframe 中,我通过不同父域上的 postmessage 调用脚本。但是,我不知道这是否与此有关。

0 投票
1 回答
532 浏览

javascript - 如何使我的网站与即将到来的 SharedArrayBuffer 跨域隔离更改兼容

因此,我读到 Chrome 即将进行更改,以启用 SharedArrayBuffer 的使用,特别是“使您的网站“跨域隔离””。我的站点使用了不符合此要求的外部 API。所以我所做的是,使用子域将使用 SharedArrayBuffer 的代码卸载到 iframe 中,并将所需的标头添加到该页面。现在阅读更多内容,似乎我仍然需要为顶级文档提供所需的标题,否则我仍然会在控制台中收到警告。

澄清一下,我的网站现在使用以下结构:

  • app.website.com-> 包含完整的应用程序功能
  • service.website.com-> 包含使用 SharedArrayBuffer 的功能

我以为我可以简单地添加所需的标题service.website.com,一切都会正常工作,但我仍然收到跨源警告。有任何想法吗?

0 投票
1 回答
162 浏览

javascript - 将 SharedArrayBuffer 转换为普通的 ArrayBuffer

我正在尝试ImageDataUint8ClampedArray基于 a创建一个新的SharedArrayBuffer,因为ImageData构造函数不接受Uint8ClampedArray基于 aSharedArrayBuffer我必须以ArrayBuffer某种方式将其转换为正常。

任何想法如何将其转换SharedArrayBuffer为正常ArrayBuffer或如何ImageData创建SharedArrayBuffer

0 投票
2 回答
2211 浏览

node.js - 在 nodejs 中设置 Cross-origin-Embedder-Policy 和 Cross-origin-Opener-Policy 标头

我一直在开发一个网站,使用 express(NodeJS) 作为后端,使用 React 作为前端。由于此错误“ReferenceError:SharedArrayBuffer 未定义”,我遇到了我的应用程序无法在 Firefox 上运行的问题。在网上搜索了一下之后,它似乎与CORS有关。我看到在 Chrome 上也有关于使用 SharedArrayBuffer 的警告。

所以我读到我需要设置这些标题 ̀Cross-Origin-Opener-Policy: same-origin Cross-Origin-Embedder-Policy: require-corp

但我不确定如何做到这一点。在我的后端,我一直在使用 cors 包来设置我的 cors 标头和选项

我也尝试过使用这种方法,但它似乎也不起作用:

我完全错过了什么/误解吗?这是我第一次开发 Web 应用程序,此时我有点迷失了。任何帮助将不胜感激。

谢谢

0 投票
1 回答
89 浏览

google-auth-library - 具有跨源隔离的 Google oAuth2 登录

我有一个依赖 SharedArrayBuffer 的网络应用程序。我在我的网站上打开了跨域隔离,因为谷歌浏览器将在月底之前需要它。

但是,这样做会破坏 Google oAuth2 登录。

我尝试使用跨域标志导入身份验证脚本,但没有成功,因为它依次尝试导入其他被阻止的脚本。

登录.html

哪个是仍然能够使用 google 的 oAuth2 的最佳方法?

谢谢,