问题标签 [storage-access-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 如何调试 Safari ITP 2.0 requestStorageAccess 失败
我目前正在努力使我的代码与Safari ITP 2.0兼容。在 onClick 触发的方法中,我的代码类似于以下代码:
然而,运行它会得到日志语句“'Storage Access API call failed...'”而没有来自 Safari 的提示 - 更令人沮丧的是它以前工作但现在又开始失败了。有什么方法可以调试 requestStorageAccess 调用失败的原因?
我尝试按照说明启用 ITP 调试模式日志,我确实从中得到了一些用处。它给了我一次这个错误:
2018-09-04 15:15:40.930157-0700 0x110c87 信息 0x0
69100 Safari 技术预览:(WebKit) [com.apple.WebKit:ResourceLoadStatisticsDebug] 无法授予对 example.com 的存储访问权限,因为它的 cookie 在第三方上下文中被阻止并且它没有作为第一方接收用户交互。
但是当我在第一方上下文中访问它并重新加载页面时,我没有进一步的理由说明对 requestStorageAccess 的调用失败了。如果有人有任何想法,请告诉我您对我尝试调试问题的建议。
谢谢!
javascript - Safari ITP 2.0 存储访问 API - 在 hasStorageAccess 中嵌套 requestStorageAccess 时遇到问题 - 非嵌套作品
我目前正在尝试实现调用存储访问 API,但是在将 requestStorageAccess 调用嵌套在 hasStorageAccess 中时遇到问题。
这是代码的大纲 - 这是相当标准的:
单击按钮触发此方法时,我总是陷入“失败”功能,没有出现请求存储访问的提示。
令人惊讶的是,这个非嵌套代码完美地工作:
此代码有效 - 它在第一个请求时重新加载 iframe,然后在重新加载另一个请求后提供数据,但是通过执行 !!document.cookie 检查 cookie 访问非常麻烦(如果一开始没有 cookie 数据怎么办? ),我更想了解这里出了什么问题。有人有什么主意吗?
对于一个可能的解决方案,有什么方法可以强制解析 document.hasStorageAccess() 所以我不需要嵌套它?
编辑:
强迫承诺解决也无济于事。见代码示例:
仍然进入那个“失败”功能......
javascript - 成功 requestStorageAccess() 调用后,Firefox Storage Access API 拒绝本地存储
我想测试新的Firefox 存储访问 API以允许第一方存储(cookie、本地存储、indexeddb,...)到不同域的 iframe(但仍在我的控制之下)。
父标记/代码
子 iframe 标记/代码
从子 iframe 中单击“登录”按钮时,会生成以下日志输出:
可见的结论是:
- 承诺 document.hasStorageAccess() 解决
- hasAccess 参数最初为“假”
- document.requestStorageAccess() 的承诺被返回并解决
- 第二个承诺 document.hasStorageAccess() 解决
- hasAccess 参数现在为“true”
- 然而,对本地存储的简单存储访问是不可能的。
我做错了什么?
更多信息:
javascript - 存储 API 授予后如何访问第一方 cookie?
我研究了使用存储访问 API https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API/从第 3 个 iframe 访问第一方 cookie 的可能性。问题是,尽管存储访问 API 给了我访问权限,但document.cookie
iframe 内部与上面的不同。
我用的是Firefox 67,dom.storage_access.enabled
设置为true。我阅读了 MDN 和 webkit.org 上的所有文档,但仍然无法正常工作。
这是从本地 HTTP 服务器提供的顶级页面first.test:8002/
并且 iframe 包含以下代码(主要是从上面链接的 MDN 复制)
所以意图很明确 1. 第一方将 KEY=42 存储到 document.cookie 2. 第三方 iframe 请求并访问和打印 document.cookie 并存储foo=bar
在那里。
问题是,尽管 hasStorageAccess 或 requestStorageAccess 解析为 true,但 cookie 和存储看起来不同。我希望 document.cookie 现在会解析到第一方商店。
请注意,DOMException
这对我访问第一方 cookie 的能力没有任何影响。我最初使用https://webkit.org/blog/8124/introducing-storage-access-api/中描述的表单,但是.then
使用两个函数回调调用对访问 Cookie Jar 没有任何影响。
任何线索可能是问题所在?还是该功能过于实验性,以至于现在可能有问题?
cookies - Safari 的“存储访问 API”是否仅适用于 iframe?
我正在尝试在模式内的普通旧 JavaScript 中使用存储访问 API。我没有使用 iframe。我在网上看到的关于存储访问 API 参考 iframe 的所有文档。这是否意味着该技术仅适用于 iframe,或者我可以在常规 javascript 文件中使用它吗?
我尝试将它附加到 html 中的 onclick 事件,并使用 javascript 以编程方式创建它,但这些似乎都不起作用。我无法显示“是否允许 'video.example' 在浏览 'news.example.com' 时使用 cookie 和网站数据”。
我希望看到 Safari 弹出窗口,但我没有。请帮忙!
cookies - 从 Safari 13 中的 iframe 读取带有“Samesite=None;Secure”的 cookie
我有一个 iframe,我在其中使用 cookie 身份验证。当用户登录时,cookie 在我的域上正常设置。我使用 SameSite=None;Secure。问题是当第三方网站从我的域中嵌入 iframe 时,我的身份验证 cookie 未通过,因此 iframe 无法验证用户身份。
这在 Chrome 和 Firefox 中运行良好,但在 Safari 中不起作用(并且它曾经工作到大约一个月前)
我知道 SameSite=None 的Webkit 错误,据说在 Safari 13 中已修复。我知道 Safari 不再允许 iframe 设置第三方 cookie(多年来一直如此,所以我看不到它如何与最近的变化有关)。但是,我不是要设置 cookie - 我只是想阅读它。直到最近,这是可能的(参见这个 SO question)。
在 Safari 13 之前,有一种解决方法允许人们通过将首页重定向到 cookie 设置域然后返回原始页面来设置第三方 cookie。在这种情况下,iframe 将能够看到 cookie(因为同样,iframe 无法写入但它可以读取 cookie。
我尝试设置一个没有 SameSite 属性的辅助 cookie,因为这些应该可以工作,但它仍然没有被发送。
无论是否设置了 SameSite,Safari 现在是否会完全删除 cookie?如果是这样,他们为什么要费心修复 SameSite 错误?有些东西没有加起来。
更新:这似乎与 Apple 的 ITP 2 有关,它对第三方 cookie 设置了严格的标准,甚至根据他们认为可能进行不良跟踪的域来区分域:https ://www.seerinteractive.com/blog/什么是智能跟踪预防/
因此,从我收集到的信息来看,这些似乎无法规避这种情况。
更新 2:我想我可能在 Webkit 的存储访问 API 中找到了可靠的解决方案:https ://webkit.org/blog/8124/introducing-storage-access-api/
javascript - 无法使用 Safari 上的存储访问 API 在 iframe 中设置 cookie
我的页面上有一个 iframe。由于 Safari 阻止第 3 方 cookie,我正在尝试使用“开发人员指南”下建议的存储访问 API:https ://webkit.org/blog/10218/full-third-party-cookie-blocking-and-more /。我从文档中复制了以下代码:
浏览器控制台输出:
如您所见,授权似乎成功但仍然无法设置cookie。有谁知道出了什么问题?
Safari 版本 13.0.1
编辑: Safari 13.1 上的控制台输出:
注意:封闭页面是一个简单的iframe
标签,带有一个src
指向该页面的标签。
android - Android Scoped Stoage - 在 onActivityResult 中获取视频详细信息
用例 - 目前我正在开发视频上传模块。为了获取视频,我已经触发了 SAF 视频选择器意图,但即使我已经观看了 Google IO 19 Preparing Scoped Storage Video 但我也无法获得任何方式或代码来从 OnActivityResult 中的 uri 获取视频详细信息,但也没有提供任何示例代码如何要做到这一点。(视频细节意味着持续时间大小名称分辨率和名称)
要获取视频详细信息,我们必须使用推荐的 MediaStore api,如果我传递文件 uri,MediaStore 仅适用于内容 URI,则光标将始终为空,并且我们仅在光标不为空时获取内容 uri
希望有人能帮助我
我正在使用此代码打开视频选择器
在 onActivityResult 中通过传递来自意图的 uri 调用了这个函数-
已通过互联网搜索解决方案,但没有找到任何解决方案,因此在此处发布。我的测试设备是荣耀 8x(Android 10 版本)
javascript - 请求存储访问失败
当我在 iframe 中的页面上请求存储访问权限时,它返回“未定义”。
这意味着什么?我希望得到一个真实的,并且会理解错误。(被拒绝)但是在这种情况下未定义是什么意思?什么地方出了错?
javascript - Safari iframe hasStorageAccess,但从它的非 iframed url 输出不同的 localStorage
我有一个 iframe,我正在尝试在https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API上集成存储访问 API
iframe 的 html 如下:
在我的 iframe 中有以下脚本代码:
当此脚本运行时,它显示已授予访问权限,但输出一个空的 localStorage。
如果我按照 iframe urlhttps://dev.mysite.io/auth/iframe.html
并检查 localStorage,它包含所有正确的项目。
(await hasStorageAccess()) === true
为什么我的iframe 和完全相同 url 的选项卡之间的本地存储不同?