Как отладить сбой requestStorageAccess Safari ITP 2.0 - PullRequest
0 голосов
/ 04 сентября 2018

В настоящее время я работаю над тем, чтобы сделать мой код совместимым с Safari ITP 2.0 . В методе, который запускается на onClick, у меня есть код, подобный коду ниже:

if (document.hasStorageAccess && document.requestStorageAccess) {
  console.log('On Safari 12');
  document.hasStorageAccess().then(
      function successful(hasAccess) {
        console.log('Testing if hasAccess');
        if (hasAccess) {
          console.log('Access granted already');
        } else {
          console.log('Requesting access');
          document.requestStorageAccess().then(
              function successful() {
                console.log('Access request was a success');
                window.location.reload();
              },
              function fail() {
                console.log('Storage Access API call failed...');
              });
        }
      },
      function rejected(reason) {
        console.log('hasStorageAccess failed: ', reason);
      });
}

Однако, запустив эту команду, я получаю оператор записи «Сбой вызова API доступа к хранилищу ...» без запроса от Safari - что более неприятно, так это то, что раньше он работал, но теперь снова начинает отказывать. Есть ли способ отладки, почему произошел сбой вызова requestStorageAccess?

Я попытался включить журналы режима отладки ITP в соответствии с инструкциями , и я получил некоторую пользу от этого. Это дало мне эту ошибку один раз:

2018-09-04 15: 15: 40.930157-0700 0x110c87 Информация 0x0
69100 Safari Technology Preview: (WebKit) [com.apple.WebKit: ResourceLoadStatisticsDebug] Невозможно предоставить хранилище доступ к example.com, так как его куки заблокированы у третьих лиц контексты, и он не получил взаимодействия с пользователем в качестве первого лица.

Но когда я получил доступ к нему в контексте первой стороны и перезагрузил страницу, у меня не было никаких дальнейших причин, почему вызов requestStorageAccess не удался. Если у кого-то есть какие-либо идеи, пожалуйста, дайте мне знать, что вы предлагаете, я пытаюсь отладить проблему.

Спасибо!

1 Ответ

0 голосов
/ 17 сентября 2018

Взаимодействовали ли вы (нажмите / щелкните / введите форму) с вашим сайтом в качестве первого лица? Простое посещение не достаточно. Пользователь должен взаимодействовать с веб-страницей с тем же eTLD + 1, что и домен, запрашивающий доступ к хранилищу.

Пример: 1) service.example классифицируется с возможностями отслеживания по ITP. 2) Пользователь посещает и взаимодействует со страницей из service.example или * .service.example. 3) service.example вызывает API-интерфейс доступа к хранилищу по адресу othersite.example, когда пользователь нажимает в iframe service.example.

...