- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在努力使我的代码与 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 call failed...'”,但没有来自 Safari 的提示 - 更令人沮丧的是它以前有效但现在又开始失败了。有什么方法可以调试 requestStorageAccess 调用失败的原因吗?
我尝试根据 the instructions 启用 ITP Debug模式日志,我确实从中得到了一些用处。它给了我一次这个错误:
2018-09-04 15:15:40.930157-0700 0x110c87 Info 0x0
69100 Safari Technology Preview: (WebKit) [com.apple.WebKit:ResourceLoadStatisticsDebug] Cannot grant storage access to example.com since its cookies are blocked in third-party contexts and it has not received user interaction as first-party.
但是当我在第一方上下文中访问它并重新加载页面时,我没有进一步了解 requestStorageAccess 调用失败的原因。如果有人有任何想法,请告诉我您建议我尝试调试问题。
谢谢!
最佳答案
有更新的调试说明:https://stackoverflow.com/a/61532464/13443904
但我也想为那些在 Safari ITP 上苦苦挣扎的人提供一些更具体的步骤,因为弄清楚所有规则需要很长时间。
1) 不要在 hasStorageAccess 中嵌入 requestStorageAccess。这将失去提示请求存储访问所需的用户交互(单击按钮)。
2) hasStorageAccess 和 requestStorageAccess 是 promise 。确保任何后续操作都嵌套在 promise 的成功闭包中(即,如果您有提交按钮,请不要让它在您完成请求 requestStorageAccess 之前提交表单)。
3) 在您可以通过子域的 iframe 中的用户交互请求第三方 cookie 的存储访问之前,您必须设置第一方 cookie 并从子域的顶级窗口进行用户交互。在主域/父窗口中设置 cookie/交互不算数。
4) 在 Safari Technology Preview 中进行测试可以更轻松地重置 ITP 选择 - 只需清除历史记录并退出/重新打开,您就可以从头开始。 Safari 似乎永远坚持这些值(value)观。
关于javascript - 如何调试 Safari ITP 2.0 requestStorageAccess 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52173595/
我想强制 Safari 使用新的 ITP 2.0 将我的域之一标记为跟踪器。 我跟着这里的指南https://webkit.org/blog/8387/itp-debug-mode-in-safari
在客户的 Google Analytics 帐户中,我注意到 safari 应用内浏览器 session 的返回率比 Android webview 浏览器高得多。该平台是一个应用程序——一个用于 I
我目前正在努力使我的代码与 Safari ITP 2.0 兼容.在 onClick 触发的方法中,我的代码类似于以下代码: if (document.hasStorageAccess && docum
我目前正在尝试调用存储访问 API,但在将对 requestStorageAccess 的调用嵌套在 hasStorageAccess 中时遇到问题。 这里是代码的概要——它是相当标准的: req
我是一名优秀的程序员,十分优秀!