问题标签 [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.
javascript - 是否可以通过广播通道 API 将 SharedArrayBuffer 广播给 Web Worker?
Broadcast Channel API似乎是postMessage或Channel 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的规范,其中说:
对于目的地中的每个目的地...
- 让数据为 StructuredDeserialize(serialized, targetRealm)。如果这引发异常,则捕获它,使用 MessageEvent 在目的地触发名为 messageerror 的事件,并将 origin 属性初始化为 sourceOrigin 的序列化,然后中止这些步骤。
StructuredDeserialize 在https://html.spec.whatwg.org/multipage/structured-data.html#structureddeserialize中定义,似乎暗示它涵盖了 SharedArrayBuffers:
- 否则,如果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)
主要收到{你好:“来自工人”}
工人收到空
谷歌浏览器的实现是不正确的,还是我误解了规范?
webassembly - WebAssembly LinkError: WebAssembly.instantiate(): 内存共享状态不匹配,声明 = 0,导入 = 1
我有一个简单的 c 代码:
将其编译为 wasm:
以下 HTML 工作正常:
但是,如果我设置memory
为shared: true
:
Chrome 显示错误“LinkError:WebAssembly.instantiate():内存共享状态不匹配,声明 = 0,导入 = 1”。
firefox - 如何在 Firefox 中使用 ffmpeg.wasm 而不获取 SharedArrayBuffer?
我正在尝试在反应应用程序中加载 ffmpeg.wasm 来做一个小型视频转换器项目。该代码在 chrome 上运行良好,但在 Firefox 开发版(83.0b)中我发现以下错误:
ReferenceError:未定义 SharedArrayBuffer
这是捕获错误的组件部分(变量 ready 永远不会变为 true):
在此先感谢,让我知道是否应该提供更多详细信息。
javascript - 是否存在由工作线程填充的阻塞 ArrayBuffer?
我想使用ion-js,但它是字符串或 ArrayBuffers 上的同步库,而不是 Stream 或 ReadableStream。
我想使用 worker_threads、SharedArrayBuffer 和 Atomics 来创建一个填充在后台线程中并阻塞等待字节的 ArrayBuffer。
有一个未显示的工作线程读取流并更新支持 dataBuffer 和 availableBytes 的两个共享数组缓冲区。
当我直接调用 slice 时,这实际上有效。
但是,当我用类型化数组包装阻塞数组时它不起作用
javascript - Google 系统最近检测到 SharedArrayBuffers
我最近从 Google 收到了以下这条消息。它说我正在使用 SharedArrayBuffers 但我不知道它们是什么。有没有办法确定我是否使用他们所说的我?我正在做的唯一类型的跨域工作是在 iframe 中,我通过不同父域上的 postmessage 调用脚本。但是,我不知道这是否与此有关。
javascript - 如何使我的网站与即将到来的 SharedArrayBuffer 跨域隔离更改兼容
因此,我读到 Chrome 即将进行更改,以启用 SharedArrayBuffer 的使用,特别是“使您的网站“跨域隔离””。我的站点使用了不符合此要求的外部 API。所以我所做的是,使用子域将使用 SharedArrayBuffer 的代码卸载到 iframe 中,并将所需的标头添加到该页面。现在阅读更多内容,似乎我仍然需要为顶级文档提供所需的标题,否则我仍然会在控制台中收到警告。
澄清一下,我的网站现在使用以下结构:
app.website.com
-> 包含完整的应用程序功能service.website.com
-> 包含使用 SharedArrayBuffer 的功能
我以为我可以简单地添加所需的标题service.website.com
,一切都会正常工作,但我仍然收到跨源警告。有任何想法吗?
javascript - 将 SharedArrayBuffer 转换为普通的 ArrayBuffer
我正在尝试ImageData
从Uint8ClampedArray
基于 a创建一个新的SharedArrayBuffer
,因为ImageData
构造函数不接受Uint8ClampedArray
基于 aSharedArrayBuffer
我必须以ArrayBuffer
某种方式将其转换为正常。
任何想法如何将其转换SharedArrayBuffer
为正常ArrayBuffer
或如何ImageData
创建SharedArrayBuffer
?
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 应用程序,此时我有点迷失了。任何帮助将不胜感激。
谢谢
google-auth-library - 具有跨源隔离的 Google oAuth2 登录
我有一个依赖 SharedArrayBuffer 的网络应用程序。我在我的网站上打开了跨域隔离,因为谷歌浏览器将在月底之前需要它。
但是,这样做会破坏 Google oAuth2 登录。
我尝试使用跨域标志导入身份验证脚本,但没有成功,因为它依次尝试导入其他被阻止的脚本。
登录.html
哪个是仍然能够使用 google 的 oAuth2 的最佳方法?
谢谢,