如何在没有 cross-origin 隔离的情况下在 chrome 中启用 sharedArrayBuffer

How to enable sharedArrayBuffer in chrome without cross-origin isolation

我有这个实验,我只在我的本地机器上 运行:我加载一个外部网页,例如 https://example.com 和 puppeteer 我注入一个 javascript 文件从 http://localhost:5000.

提供

到目前为止没有任何问题。但是,这个注入的 javascript 文件加载了一个 WebAssembly 文件,然后我得到以下错误

Uncaught (in promise) ReferenceError: SharedArrayBuffer is not defined
....

事实上,没有定义 SharedArrayBuffer (Chrome v96),结果我的代码根本无法工作(虽然它曾经可以工作)。所以我的问题是,我该如何解决这个错误?

阅读更多有关此内容,似乎可以添加两个 headers

   res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
   res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp');

我对这两个文件所做的都没有成功。鉴于该页面与注入的 js 和 WASM 文件来自不同的域,这可能行不通。

但也许还有其他可能的解决方案。这是我启动 chrome

的命令
      client.browser = await puppeteer.launch({
        headless: false,
        devtools: true,
        defaultViewport: null,
        executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
        args: [
            '--debug-devtools',
            '--no-sandbox',
            '--disable-setuid-sandbox',
            '--disable-web-security',
            '--allow-running-insecure-content',
            '--disable-notifications',
            '--window-size=1920,1080'
        ]
        //slowMo: 500
    });

我知道 chrome 有太多选项,所以也许这个 SharedArrayBuffer 问题也有一个选项?

希望有人知道这是如何工作的并且可以帮助我,非常感谢!

Peter Beverloo 不久前在他的博客上列出了 Chromium 命令行开关的详尽列表。

There are lots of command lines which can be used with the Google Chrome browser. Some change behavior of features, others are for debugging or experimenting. This page lists the available switches including their conditions and descriptions. Last automated update occurred on 2020-08-12.

如果您正在寻找特定的命令,它会在那里,试一试。不过我很确定跨源限制是专门为防止您尝试执行的操作而实施的。

this帖有人建议开始chrome如下

$> chrome --enable-features=SharedArrayBuffer 

意味着我可以将 --enable-features=SharedArrayBuffer 添加到我的人偶配置中!