在
example.com
上,我有一个加载 anotherexample.com
的 iframe。我遇到的问题是,如果我直接加载 anotherexample.com
(在 iframe 之外),localStorage 不会与 iframed anotherexample.com
共享。
这可以实现吗?
可以通过访问 https://eskimo.dev/localstorage/ 查看该问题的示例,然后访问 https://eskimo.ooo/localstorage/iframe(其中 iframes 第一个链接)。 iframe 没有使用之前的 localStorage。
我猜这个问题可能是由于过去几年和几个月在各种浏览器中引入的“分区存储”造成的。对我来说,类似的东西一年前在 Firefox 中可以工作,但现在不再工作了。
为了提高隐私性,浏览器现在将不同域中包含的 iframe 的存储分开,即使该框架具有相同的域也是如此。
有一个 API(“存储访问 API”)可以询问用户是否同意未分区的存储:https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API 我自己还没有尝试过,但从 MDN 上的信息来看,Chrome 中当前的实现或多或少是一个笑话,而且几乎没有用,因为它需要你向 GitHub 存储库提出拉取请求(https:// /github.com/GoogleChrome/lated-website-sets/)。不过,Firefox 和 Safari 似乎没问题,至少对于 cookie 来说是这样。
不知道为什么它的行为不正常。也许代码片段在这里可能真的很有帮助。但是通过上面OP中链接的例子。它在那里不起作用的原因是:
什么会起作用? :
因为域来源没有改变,因此它可以访问相同的localStorage。
谢谢
它是一个完整的其他域,因此无法访问其他域的localStorage。
但是,如果您控制了两个域,则可以使用 javascript 事件通过域共享 localStorage。
您可以在这里查看更多内容:跨域本地存储与javascript