Невозможно установить cook ie в iframe с помощью API-интерфейса Storage Safari - PullRequest
9 голосов
/ 03 апреля 2020

У меня есть фрейм на моей странице. Поскольку Safari блокирует сторонние файлы cookie, я пытаюсь использовать API доступа к хранилищу, как указано здесь в «Руководстве разработчика»: https://webkit.org/blog/10218/full-third-party-cookie-blocking-and-more/. Я скопировал следующий код из документации :

<script type="text/javascript">
  window.addEventListener('load', () => {
    document.getElementById('test-button').addEventListener('click', () => {
      document.hasStorageAccess().then(hasAccess => {
        console.log('hasAccess: ' + hasAccess);
        if (!hasAccess) {
          return document.requestStorageAccess();
        }
      }).then(_ => {
        console.log('Now we have first-party storage access!');
        document.cookie = "foo=bar";
        console.log(`document.cookie: ${document.cookie}`);
      }).catch(_ => {
        console.log('error');
      });
    });
  });
</script>

<button id="test-button">Test</button>

Вывод на консоль браузера:

[Log] hasAccess: true
[Log] Now we have first-party storage access!
[Log] document.cookie: 

Как видите, грант выглядит успешным, но все еще не могу установить повара ie. У кого-нибудь есть идеи, что не так?

Safari Версия 13.0.1

РЕДАКТИРОВАТЬ: Консольный вывод в Safari 13.1:

[Log] hasAccess: false
[Log] error

Примечание: Вложенная страница представляет собой простой тег iframe с src, указывающим на эту страницу.

1 Ответ

3 голосов
/ 11 апреля 2020

TL; DR

Убедитесь, что для домена уже настроен повар ie в контексте первой стороны.


Есть несколько вещей, на которые стоит обратить внимание для этого примера кода. Обратите внимание, что в Safari 13.1 проверено следующее:

Условия запроса пользователя и последующего предоставления доступа:

  1. document.requestStorageAccess должен вызываться в результате действия пользователя , Несмотря на то, что документально подтверждено в документах MDN , document.hasStorageAccess, по-видимому, не распространяет действие пользователя.
  2. Пользователь уже должен был взаимодействовать с третьей стороной в контексте первой стороны. Любой щелчок по документу подойдет.

Условия возможности написать повара ie:

Повар ie должен быть уже установлен в домене в контекст первой стороны. Этот повар ie может быть установлен сервером в качестве заголовка ответа или JS с использованием document.cook ie. После некоторого дальнейшего тестирования кажется, что этот cook ie НЕ ДОЛЖЕН быть установлен с флагом домена, чтобы последующий cook ie был установлен в контексте третьей стороны. Это означает, что в действительности существующий повар ie также должен быть настроен на тот же самый поддомен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...