如何调试Safari ITP 2.0 requestStorageAccess失败

问题描述 投票:2回答:1

我目前正在使我的代码与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);
      });
}

但是,运行此命令使我得到日志记录语句“'Storage Access API调用失败...'”,而没有来自Safari的提示-更令人沮丧的是,它以前可以工作,但现在又开始失败。有什么方法可以调试为什么对requestStorageAccess的调用失败?

我尝试根据the instructions启用ITP调试模式日志,但确实从中获得了一些用处。它一次给了我这个错误:

2018-09-04 15:15:40.930157-0700 0x110c87信息0x069100 Safari技术预览:(WebKit)[com.apple.WebKit:ResourceLoadStatisticsDebug]无法授予存储由于example.com的cookie被第三方阻止,因此可以访问上下文,并且尚未以第一方的身份收到用户交互。

但是当我在第一方上下文中访问它并重新加载页面时,没有其他原因导致对requestStorageAccess的调用失败。如果有人有任何想法,请告诉我您建议我尝试调试的问题。

谢谢!

javascript cookies iframe safari storage-access-api
1个回答
1
投票

您是否以第一方身份与您的网站进行交互(点击/单击/填写表格)?仅仅拜访是不够的。用户必须与具有与请求存储访问的域相同的eTLD + 1的网页进行交互。

示例:1)service.example被ITP划分为具有跟踪能力的类别。2)用户访问来自service.example或* .service.example的页面并与之交互。3)当用户点击service.example的iframe时,service.example在othersite.example下调用Storage Access API。

© www.soinside.com 2019 - 2024. All rights reserved.