文件:requestStorageAccessFor() 方法
Document 介面的 requestStorageAccessFor() 方法允許頂級站點代表源自同一相關網站集中另一個站點的嵌入內容請求第三方 Cookie 訪問許可權。它返回一個 Promise,如果訪問許可權被授予則解析,如果訪問許可權被拒絕則拒絕。
語法
requestStorageAccessFor(requestedOrigin)
引數
requestedOrigin-
一個字串,表示你請求第三方 Cookie 訪問許可權的來源 URL。
返回值
一個 Promise,如果第三方 Cookie 訪問許可權被授予則以 undefined 履行,如果訪問許可權被拒絕則拒絕。
除非頂級內容當前正在處理使用者手勢(例如點選或輕觸)(瞬時啟用),或者之前已授予許可權,否則 requestStorageAccessFor() 請求將自動被拒絕。如果之前未授予許可權,則它們必須在基於使用者手勢的事件處理程式中執行。使用者手勢行為取決於 Promise 的狀態
- 如果 Promise 解析(即,許可權已授予),則使用者手勢未被消耗,因此指令碼可以隨後呼叫需要使用者手勢的 API。
- 如果 Promise 被拒絕(即,許可權未授予),則使用者手勢已被消耗,因此指令碼不能執行任何需要手勢的操作。這可以防止指令碼在許可權被拒絕時再次呼叫
requestStorageAccessFor()。
異常
InvalidStateErrorDOMException-
如果當前的
Document尚未啟用,則丟擲此錯誤。 NotAllowedErrorDOMException-
在以下情況下丟擲
- 文件的視窗不是安全上下文。
- 文件不是頂級文件。
- 文件的源為
null。 - 提供的
requestedOrigin是不透明的。 - 頂級站點和嵌入式站點不在同一相關網站集中。
- 嵌入的
是沙盒化的,並且未設定allow-storage-access-by-user-activation令牌。 - 用法被
storage-access許可權策略阻止。 - 使用者代理的 API 使用許可權請求拒絕了用法。
TypeError-
如果
requestedOrigin不是有效的 URL,則丟擲此錯誤。
描述
requestStorageAccessFor() 方法解決了在頂級站點上採用 Storage Access API 的挑戰,這些站點使用需要 Cookie 的跨站點影像或指令碼。它與預設阻止訪問第三方、未分割槽 Cookie 以提高隱私(例如,防止跟蹤)的使用者代理相關,並且是 Storage Access API 的提議擴充套件。
requestStorageAccessFor() 可以為直接嵌入到頂級站點中的跨站點資源(例如 元素)啟用第三方 Cookie 訪問,這些資源無法自行請求儲存訪問許可權。嵌入在 中具有自己的邏輯和資源並需要第三方 Cookie 訪問許可權的跨站點內容應透過 Document.requestStorageAccess() 請求儲存訪問許可權。
要檢查是否已透過 requestStorageAccessFor() 授予了訪問第三方 Cookie 的許可權,你可以呼叫 Permissions.query(),並指定功能名稱 "top-level-storage-access"。這與常規 Document.requestStorageAccess() 方法使用的功能名稱不同,後者是 "storage-access"。
Permissions.query() 呼叫必須指定嵌入源;例如
navigator.permissions.query({
name: "top-level-storage-access",
requestedOrigin: "https://www.example.com",
});
注意:此功能的用法可能會被伺服器上設定的storage-access 許可權策略阻止(與控制 Storage Access API 其餘部分的策略相同)。此外,文件必須透過額外的瀏覽器特定檢查,例如允許列表、阻止列表、裝置分類、使用者設定或反點選劫持啟發式方法。
示例
function rSAFor() {
if ("requestStorageAccessFor" in document) {
document.requestStorageAccessFor("https://example.com").then(
(res) => {
// Use storage access
doThingsWithCookies();
},
(err) => {
// Handle errors
},
);
}
}
在成功的 requestStorageAccessFor() 呼叫之後,如果跨站點請求包含 CORS / crossorigin,則會包含 Cookie,因此站點可能希望在觸發請求之前等待。此類請求必須使用 credentials: "include" 選項,並且資源必須包含 crossorigin="use-credentials" 屬性。
例如
function checkCookie() {
fetch("https://example.com/getcookies.json", {
method: "GET",
credentials: "include",
})
.then((response) => response.json())
.then((json) => {
// Do something
});
}
注意:有關更完整的示例,請參閱使用 Storage Access API。
規範
| 規範 |
|---|
| requestStorageAccessFor API # dom-document-requeststorageaccessfor |
瀏覽器相容性
載入中…