跨域 iframe 分区 IndexedDB

Posted

技术标签:

【中文标题】跨域 iframe 分区 IndexedDB【英文标题】:Cross Origin Iframes Parititioning IndexedDB 【发布时间】:2021-04-27 14:22:39 【问题描述】:

我有一个跨源 iframe,它使用 indexeddb 进行本地存储。我想要的是让我的 indexeddb 将原点设置为 iframe 的原点。当我访问 iframe 的域时,我希望能够访问该域的 indexeddb 中存储的数据。

这在 Chrome 中运行良好,但是在 Firefox 和 Safari 中,我发现了一个问题。 iframe 代码根据是否加载到 iframe 中获得两个不同的 indexeddb。我弄清楚了 Firefox 在做什么,我怀疑 Safari 也在做类似的事情。 Firefox 实际上是根据 iframe 的域和嵌入父域的并集对 indexeddb 进行分区。 (即 Firefox 不是按 iframe 的来源进行分段,而是按 iframe 和父项的来源的组合。)

我一直在研究 iframe 上的各种沙箱参数,但我还没有找到解决方法,也没有太多关于此的信息。有没有强制 Firefox 和 Safari 在这里只使用 iframe 的来源?

【问题讨论】:

你是如何在 Chrome 中实现跨域 iframe 的 indexedDB 存储的?我正在尝试相同的方法,但无法做到。我想为 iframe 的域存储一些数据。你能帮忙吗?任何帮助表示赞赏。谢谢。 【参考方案1】:

这是由于state partitioning。

您可以使用Document.requestStorageAccess() api 请求未分区状态访问

【讨论】:

以上是关于跨域 iframe 分区 IndexedDB的主要内容,如果未能解决你的问题,请参考以下文章

iframe跨域通信方案

iframe与父页面之间通讯跨域问题

JS跨域访问操作iframe里的dom

如何用javascript 跨域获取iframe子页面的元素信息

iframe跨域+

iframe子页面在跨域情况下使用父页面的方法