我有這個實驗,我只在我的本地機器上運行:我加載一個外部網頁,例如https://example.com
,我用 puppeteer 注入一個 javascript 檔案,該檔案從http://localhost:5000
.
到目前為止,沒有任何問題。但是,這個注入的 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');
我對這兩個檔案所做的都沒有取得多大成功。鑒于該頁面來自與注入的 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 問題也有一個選項?
希望有人知道這是如何作業的并且可以幫助我,非常感謝!
uj5u.com熱心網友回復:
不久前,Peter Beverloo在他的博客上列出了大量的 Chromium 命令列開關。
有很多命令列可以與 Google Chrome 瀏覽器一起使用。一些改變特性的行為,其他的用于除錯或試驗。此頁面列出了可用的開關,包括它們的條件和說明。上次自動更新發生在 2020 年 8 月 12 日。
- 見@ https://peter.sh/experiments/chromium-command-line-switches/
如果你正在尋找一個特定的命令,它會在那里,試一試。我很確定跨域限制是專門實施的,以防止您嘗試做的事情。
uj5u.com熱心網友回復:
在此執行緒中,有人建議按如下方式啟動 chrome
$> chrome --enable-features=SharedArrayBuffer
這意味著我可以添加--enable-features=SharedArrayBuffer
到我的 puppeteer 配置中!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/398740.html