You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何SharedWorker中SharedArrayBuffer为undefined且crossOriginIsolated为false?

为何SharedWorker中SharedArrayBuffer为undefined且crossOriginIsolated为false?

你遇到的这个问题其实和Chrome对SharedWorker的跨源隔离模式实现逻辑有关,咱们一步步拆解来看:

首先先确认你的场景:
你用emrun服务器提供了正确的跨源隔离相关响应头(Cross-Origin-Opener-Policy: same-origin、Cross-Origin-Embedder-Policy: credentialless等),主页面的控制台也正常输出crossOriginIsolated: true且SharedArrayBuffer可用,但SharedWorker里却完全相反——这不是你的配置问题,而是浏览器规范实现的细节导致的。

接下来解释核心原因:
根据HTML规范中关于Worker运行的逻辑,当创建SharedWorker时,浏览器会执行以下关键步骤:

  • 第一步:判断Worker的嵌入策略是否兼容跨源隔离,且是SharedWorker的情况下,会给Worker的代理集群设置跨源隔离模式,可选值为**"concrete"或"logical"**,具体选哪个由浏览器实现决定。
  • 第二步:只有当代理集群的跨源隔离模式是**"concrete"**时,Worker全局作用域的crossOriginIsolated才会被设为true,进而满足使用SharedArrayBuffer的安全要求。

而规范里也提到,"logical"模式是为那些难以提供SharedArrayBuffer所需安全特性的平台设计的:这种模式下,跨源隔离的部分限制会生效,但不会赋予Worker跨源隔离能力,自然也就无法访问SharedArrayBuffer。

回到你的情况,Chrome 138在处理SharedWorker时,选择了"logical"模式,这就直接导致Worker里的crossOriginIsolated为false,SharedArrayBuffer也就变成了undefined。

附上你的代码示例方便参考:
主页面index.html代码:

<html>
<body>
<script type="text/javascript">
 console.log( 'outer:', 'typeof SharedArrayBuffer:', typeof SharedArrayBuffer, 'crossOriginIsolated:', crossOriginIsolated);
 new SharedWorker('worker.js');
</script>
</body>
</html>

SharedWorker文件worker.js代码:

console.log( 'inner:', 'typeof SharedArrayBuffer:', typeof SharedArrayBuffer, 'crossOriginIsolated:', crossOriginIsolated);

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 12:53:05