我有一个仅在本地计算机上运行的实验:我从例如 https://example.com
加载外部网页,并使用 puppeteer 注入(inject)一个 javascript 文件,该文件是从 http://localhost:5000
提供服务。
到目前为止没有任何问题。但是,这个注入(inject)的 javascript 文件加载了一个 WebAssembly 文件,然后出现以下错误
Uncaught (in promise) ReferenceError: SharedArrayBuffer is not defined
....
事实上,SharedArrayBuffer 没有定义(Chrome v96),结果是我的代码根本无法工作(虽然它曾经工作过)。所以我的问题是,如何解决这个错误?
阅读更多相关内容,似乎您可以添加两个标题
res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp');
我对这两个文件都做了这件事,但没有取得太大成功。考虑到该页面与注入(inject)的 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 问题?
希望有人知道这是如何工作的并可以帮助我,非常感谢!
最佳答案
在 this有人建议按如下方式启动 chrome 线程
$> chrome --enable-features=SharedArrayBuffer
这意味着我可以将 --enable-features=SharedArrayBuffer
添加到我的 puppeteer 配置中!
关于javascript - 如何在chrome中启用sharedArrayBuffer而不进行跨域隔离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70497520/