SharedArrayBuffer Chrome扩展沙箱iFrame内



我试图通过设置一个跨源隔离的文档来使用SharedArrayBuffer。然而,因为它是在一个谷歌Chrome扩展,我需要WebAssembly,我需要在一个沙盒页面内运行这个。

我在manifest.json中定义了一个沙箱页面

{
...
"sandbox": {
"pages": ["sandbox.html"]
},
"content_security_policy": {
"sandbox": "sandbox allow-scripts; script-src 'self' 'wasm-eval'; script-src-elem 'self' 'wasm-eval' blob:; worker-src 'self' blob:"
},
"cross_origin_embedder_policy": {
"value": "require-corp"
},
"cross_origin_opener_policy": {
"value": "same-origin"
},
...
}

和我还启用了COOP和COEP的跨源隔离。

sandbox.html不做任何事情,只使用以下脚本:

window.addEventListener('load', () => {
const thing = document.createElement('h1');
thing.innerHTML = self.crossOriginIsolated ? 'GOOD am crossOriginIso' : 'BAD am not crossOriginIso';
document.body.appendChild(thing);
});

然后我有一个页面outer.html嵌入sandbox.html在iFrame。

<iframe src="sandbox.html" allow="cross-origin-isolated"></iframe>

当我打开outer.html时,我得到消息"BAD not crossOriginIso",即iFrame内的sandbox.html文档不是交叉起源隔离的(我不能使用SharedArrayBuffer)。

是否有一种方法可以在一个iFrame中的manifest v3 Chrome扩展中启用跨域隔离,其中内部文档是沙盒(通过manifest.json)。

也许更具体地说,如何添加更多的featurePolicy.allowedFeatures()沙盒iFrame(这是在Chrome扩展的manifest.json沙盒,而不是sandbox属性)。

我注意到了以下几点:

  • 直接打开sandbox.html而不使用iFrame,页面被跨域隔离。
  • 删除manifest.json中的sandbox属性会导致iframe内的文档被跨域隔离。
  • 在iFrame内执行document.featurePolicy.allowedFeatures()给出了一个非常小的功能列表(不包括cross-origin-isolated)。这个列表比直接打开sandbox.html执行相同的命令要小得多。

在chrome 103, manifest v3,工作良好

"content_security_policy": {
"extension_pages": "default-src 'self' 'wasm-unsafe-eval';style-src 'unsafe-inline' 'self' "
},
"cross_origin_embedder_policy": {
"value": "require-corp"
},
"cross_origin_opener_policy": {
"value": "same-origin"
},

不要使用沙箱来运行ffmpeg。wasm, SharedArrayBuffer在沙箱中不可用

相关内容

  • 没有找到相关文章

最新更新