Window: crossOriginIsolated 屬性
Window 介面的 crossOriginIsolated 只讀屬性返回一個布林值,指示文件是否已進行跨域隔離。
已進行跨域隔離的文件僅與彈窗和導航中的同源文件以及文件透過 CORS(以及 <iframe> 的 COEP)選擇使用的資源(包括同源和跨源)共享其瀏覽上下文組。文件的跨源 opener 或其開啟的任何跨源彈窗之間的關係被切斷。該文件還可以與其他可透過操作共享記憶體進行通訊的文件一起託管在單獨的作業系統程序中。這減輕了側通道攻擊和被稱為 XS-Leaks 的跨源攻擊的風險。
跨域隔離的文件在使用以下 API 時限制更少:
SharedArrayBuffer可以建立並透過Window.postMessage()或MessagePort.postMessage()呼叫傳送。Performance.now()提供更高的精度。Performance.measureUserAgentSpecificMemory()可以呼叫。
如果文件以包含以下 HTTP 響應頭的方式返回,則它將進行跨域隔離:
Cross-Origin-Opener-Policy頭,指令為same-origin。Cross-Origin-Embedder-Policy頭,指令為require-corp或credentialless。
API 訪問還必須由 Permissions-Policy 的 cross-origin-isolated 允許。否則,crossOriginIsolated 屬性將返回 false,並且文件將無法使用上述限制較少的 API。
值
一個布林值。
示例
跨域隔離文件
要跨域隔離文件,請執行以下操作:
-
將
Cross-Origin-Opener-PolicyHTTP 頭設定為same-origin。httpCross-Origin-Opener-Policy: same-origin -
將
Cross-Origin-Embedder-PolicyHTTP 頭設定為require-corp或credentialless。httpCross-Origin-Embedder-Policy: require-corp Cross-Origin-Embedder-Policy: credentialless -
Permissions-Policy頭的cross-origin-isolated指令不得阻止對該功能的訪問。請注意,該指令的預設允許列表是self,因此預設情況下將授予跨域隔離文件的許可權。
檢查文件是否已跨域隔離
js
const myWorker = new Worker("worker.js");
if (window.crossOriginIsolated) {
const buffer = new SharedArrayBuffer(16);
myWorker.postMessage(buffer);
} else {
const buffer = new ArrayBuffer(16);
myWorker.postMessage(buffer);
}
規範
| 規範 |
|---|
| HTML # dom-crossoriginisolated-dev |
瀏覽器相容性
載入中…