文件:requestStorageAccess() 方法
基線 2023 *
新推出
Document 介面的 requestStorageAccess() 方法允許在第三方上下文中(即嵌入在 <iframe> 中)載入的內容請求訪問第三方 Cookie 和未分割槽狀態。這與使用者代理有關,使用者代理預設情況下會阻止訪問第三方未分割槽 Cookie 以提高隱私(例如,防止跟蹤),並且它是儲存訪問 API 的一部分。
要檢查是否已授予訪問第三方 Cookie 的許可權,你可以呼叫 Permissions.query(),指定功能名稱 "storage-access"。
注意:此功能的使用可能會被伺服器上設定的 storage-access 許可權策略阻止。此外,文件必須透過額外的瀏覽器特定檢查,例如允許列表、阻止列表、裝置端分類、使用者設定、反點選劫持啟發式方法或提示使用者明確許可。
語法
requestStorageAccess()
requestStorageAccess(types)
引數
types可選-
一個物件,包含控制哪些未分割槽狀態可訪問的屬性。如果未指定,則屬性的預設值為
false。可用屬性如下:all-
一個布林值,指定是否應使所有可能的未分割槽狀態可訪問。
-
一個布林值,指定是否應使第三方 Cookie 可訪問。
sessionStorage-
一個布林值,指定是否應使
StorageAccessHandle.sessionStorage可訪問。 localStorage-
一個布林值,指定是否應使
StorageAccessHandle.localStorage可訪問。 indexedDB-
一個布林值,指定是否應使
StorageAccessHandle.indexedDB可訪問。 locks-
一個布林值,指定是否應使
StorageAccessHandle.locks可訪問。 caches-
一個布林值,指定是否應使
StorageAccessHandle.caches可訪問。 getDirectory-
一個布林值,指定是否應使
StorageAccessHandle.getDirectory()可訪問。 estimate-
一個布林值,指定是否應使
StorageAccessHandle.estimate()可訪問。 createObjectURL-
一個布林值,指定是否應使
StorageAccessHandle.createObjectURL()可訪問。 revokeObjectURL-
一個布林值,指定是否應使
StorageAccessHandle.revokeObjectURL()可訪問。 BroadcastChannel-
一個布林值,指定是否應使
StorageAccessHandle.BroadcastChannel()可訪問。 -
一個布林值,指定是否應使
StorageAccessHandle.SharedWorker()可訪問。
返回值
如果已授予第三方 Cookie 的訪問許可權且未提供 types 引數,則返回一個解析為 undefined 的 Promise;如果提供了由 types 引數請求的未分割槽狀態的訪問許可權,則返回一個解析為 StorageAccessHandle 的 Promise;如果訪問被拒絕,則返回一個拒絕的 Promise。
除非嵌入式內容當前正在處理使用者手勢(例如點選或輕觸)(瞬時啟用),或者之前已授予許可權,否則 requestStorageAccess() 請求將自動被拒絕。如果之前未授予許可權,則需要在基於使用者手勢的事件處理程式中執行它們。使用者手勢行為取決於 Promise 的狀態:
- 如果 Promise 解析(即已授予許可權),則使用者手勢未被消耗,因此指令碼隨後可以呼叫需要使用者手勢的 API。
- 如果 Promise 拒絕(即未授予許可權),則使用者手勢已被消耗,因此指令碼無法執行任何需要手勢的操作。這是有意為之的防濫用保護——它阻止指令碼迴圈呼叫
requestStorageAccess()直到使用者接受提示。
異常
InvalidStateErrorDOMException-
在以下情況下丟擲
- 當前的
Document尚未啟用。 - 提供了
types引數,並且其所有屬性均為false。
- 當前的
NotAllowedErrorDOMException-
在以下情況下丟擲
- 文件的視窗不是安全上下文。
- 使用被
storage-access許可權策略阻止。 - 文件或頂級文件的來源為
null。 - 嵌入的
<iframe>已沙盒化,並且未設定allow-storage-access-by-user-activation令牌。 - 使用者代理的 API 使用許可權請求被拒絕。
示例
document.requestStorageAccess().then(
() => {
console.log("cookie access granted");
},
() => {
console.log("cookie access denied");
},
);
document.requestStorageAccess({ localStorage: true }).then(
(handle) => {
console.log("localStorage access granted");
handle.localStorage.setItem("foo", "bar");
},
() => {
console.log("localStorage access denied");
},
);
注意:有關更完整的示例,請參閱使用 Storage Access API。
規範
| 規範 |
|---|
| Storage Access API # dom-document-requeststorageaccess |
瀏覽器相容性
載入中…
另見
Document.hasStorageAccess()、Document.hasUnpartitionedCookieAccess()、Document.requestStorageAccessFor()- 使用 Storage Access API
- Storage Access API 介紹 (WebKit 部落格)