在相同網站環境之間共用 WebAssembly 模組,僅限於相同來源。
在同網站但跨來源環境之間共用 WebAssembly (Wasm) 模組,將可執行以下動作: 已淘汰,以便允許代理程式叢集 長期下來將範圍限定為出發地開發人員在這類環境中使用 Wasm 模組 一定要有一種方法一定要將相同來源的模組例項化,才能繼續 。
什麼是 Wasm 模組?運作方式
WebAssembly 程式分為多個模組 包括部署、載入和編譯
在下方範例程式碼中,從下列來源匯入 Wasm 模組
https://iframe.site.example
已透過以下方式與 https://main.site.example
分享:
postMessage()
。請注意,這些網域是相同網站,但跨來源的網域。
https://iframe.site.example
上的 Wasm 模組:
(async () => {
const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();
從 Chrome 95 版開始,傳送者和接收者必須是同一來源。於
是上述情況,https://iframe.site.example
必須為
https://main.site.example
或反過來。
為什麼需要授予存取權
Chrome 在內部處理了不同文件、分頁和頁框 site-keyed 代理程式叢集。這表示相同的網站文件在 相同的程序 (實際的運作方式會因瀏覽器而異)。最近,Chrome 並以更精細的單位 (來源) 處理這些變數我們稱之為 origin-keyed 代理程式叢集。不過,這樣做需要耗費大量資源 origin-keyed 代理程式叢集僅套用至有限的網站。
這項計劃是將所有代理程式叢集預設為 origin-key。為了 因此必須限制需要網站輸入金鑰的功能 來源叢集:
- (僅適用於 Chrome) 您將無法再傳送
SharedArrayBuffer
敬上 或WebAssembly.Memory
。 將物件傳送至其他同網站跨來源頁面。這項功能已於 Chrome 92 版推出。 - 您無法再匯款
WebAssembly.Module
敬上 透過postMessage()
傳送至其他同網站跨來源頁面的物件。這項異動 。 - 您無法再進行設定
document.domain
。 這項舊版功能通常會允許同網站的不同來源頁面存取 同步存取彼此的 DOM,但在 origin-keyed 代理程式叢集中 已停用。
解決上述所有變更後,Chrome 將改用 origin-keyed 代理程式 叢集
如要進一步瞭解 origin-keyed 代理程式叢集,請參閱使用 Origin-Agent-Cluster 標頭要求效能區隔。
後續步驟與相關資源
為了讓 Chrome 預設使用 origin-keyed 代理程式叢集,我們要
將 document.domain
設為唯讀。Chrome 團隊想順利推行這項異動
一些時間
相片來源:Markus Winkler 為 停用