[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/ja/docs/Web/API/Storage_Access_API/Using [Back]  [Original]

API - Web API | MDN

MDN Web Docs

View in English Always switch to English

API

API

: API

API Document.cookie

<iframe>

<iframe> API

<iframe> allow-storage-access-by-user-activation sandbox allow-scripts allow-same-origin API

html
<iframe
  sandbox="allow-storage-access-by-user-activation
                 allow-scripts
                 allow-same-origin">
  
</iframe>

  1. (if (document.hasStorageAccess) {}) API
  2. API document.hasStorageAccess()
  3. true <iframe>
  4. false Permissions.query() try...catch "storage-access" query()
  5. "granted" document.requestStorageAccess()
  6. "prompt" document.requestStorageAccess()
  7. "denied"
js
function doThingsWithCookies() {
  document.cookie = "foo=bar"; // 
}

function doThingsWithLocalStorage(handle) {
  handle.localStorage.setItem("foo", "bar"); // 
}

async function handleCookieAccess() {
  if (!document.hasStorageAccess) {
    //  API 
    // 
    doThingsWithCookies();
  } else {
    const hasAccess = await document.hasStorageAccess();
    if (hasAccess) {
      // 
      doThingsWithCookies();
      // 
      const handle = await document.requestStorageAccess({
        localStorage: true,
      });
      doThingsWithLocalStorage(handle);
    } else {
      // 
      // 
      try {
        const permission = await navigator.permissions.query({
          name: "storage-access",
        });

        if (permission.state === "granted") {
          //  requestStorageAccess() 
          // 
          const handle = await document.requestStorageAccess({
            cookies: true,
            localStorage: true,
          });
          doThingsWithLocalStorage(handle);
          doThingsWithCookies();
        } else if (permission.state === "prompt") {
          // requestStorageAccess() 
          btn.addEventListener("click", async () => {
            try {
              const handle = await document.requestStorageAccess({
                cookies: true,
                localStorage: true,
              });
              doThingsWithLocalStorage(handle);
              doThingsWithCookies();
            } catch (err) {
              // 
              console.error(`Error obtaining storage access: ${err}.
                            Please sign in.`);
            }
          });
        } else if (permission.state === "denied") {
          // 
          // 
        }
      } catch (error) {
        console.log(`: ${error}`);
        doThingsWithCookies(); // 
      }
    }
  }
}

: requestStorageAccess() requestStorageAccess()

Chrome API

API Document.requestStorageAccessFor() API

requestStorageAccessFor() API <img> <script>

requestStorageAccessFor()

requestStorageAccessFor() async/await

js
navigator.permissions
  .query({
    name: "top-level-storage-access",
    requestedOrigin: "https://example.com",
  })
  .then((permission) => {
    if (permission.state === "granted") {
      // 
      // requestStorageAccessFor() 
      doThingsWithCookies();
    } else if (permission.state === "prompt") {
      // requestStorageAccessFor() 
      btn.addEventListener("click", () => {
        // 
        rSAFor();
      });
    } else if (permission.state === "denied") {
      // 
      // 
    }
  });

function rSAFor() {
  if ("requestStorageAccessFor" in document) {
    document.requestStorageAccessFor("https://example.com").then(
      (res) => {
        doThingsWithCookies();
      },
      (err) => {
        // 
      },
    );
  }
}

: requestStorageAccess() requestStorageAccessFor() Chrome 30 > Chrome

API "storage-access" "top-level-storage-access"

js
navigator.permissions.query({
  name: "top-level-storage-access",
  requestedOrigin: "https://example.com",
});

  • "granted" requestStorageAccessFor()
  • "prompt" document.requestStorageAccessFor("https://example.com")

"top-level-storage-access" CORS crossorigin credentials: "include" crossorigin="use-credentials"

js
function checkCookie() {
  fetch("https://example.com/getcookies.json", {
    method: "GET",
    credentials: "include",
  })
    .then((response) => response.json())
    .then((json) => {
      // 
    });
}

Web Proxy Viewer  |  New URL  |  Original Page