2

我试图SharedArrayBuffer通过设置一个跨域隔离的文档来使用。但是,由于它位于 Google 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.htmliFrame 的页面。

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

当我打开时outer.html,我收到消息“BAD am not crossOriginIso”,即sandbox.htmliFrame 内的文档不是跨域隔离的(我不能使用SharedArrayBuffer)。

有没有办法在内部文档被沙盒化的 iFrame 中使用清单 v3 在 Chrome 扩展中启用跨域隔离(通过manifest.json)。

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

我注意到以下几点:

  • 没有iFrame直接打开sandbox.html,页面是跨域隔离的。
  • 删除该sandbox属性会manifest.json导致 iframe 内的文档被跨域隔离。
  • 在 iFrame 内执行document.featurePolicy.allowedFeatures()会提供非常小的功能列表(并且不包括cross-origin-isolated)。这个列表比sandbox.html直接打开时执行相同的命令要小很多。
4

0 回答 0