是否可以使用 HTML5 本地存储在不同站点的页面之间共享数据?

Posted

技术标签:

【中文标题】是否可以使用 HTML5 本地存储在不同站点的页面之间共享数据?【英文标题】:Is it possible to use HTML5 local storage to share data between pages from different sites? 【发布时间】:2013-04-15 05:23:48 【问题描述】:

我想在用户端创建数据并让来自另一个 URL 的 javascript 也访问它。我知道相同的来源政策,但我想知道是否可以创建一些例外。或者,我可以使用任何技巧/功能吗?

【问题讨论】:

其他 URL 是否嵌入到 iframe 中? 不,它没有嵌入。 我知道的唯一方法是,如果您在浏览器扩展或帧间使用 localstorage。不过我不确定 IndexedDB,我玩得还不够。 我不认为你可以设置任何例外(也许像 document.domain 这样的东西来规避 SOP) - 你只能加载其他站点并使用跨域消息传递数据跨度> 这能回答你的问题吗? cross domain localstorage with javascript 【参考方案1】:

我知道的最佳技巧是使用 iframe 和 postMessage API 确实可以从外部域访问 localStorage。

这个技巧很简单:

在您的页面上,您必须为要从中获取数据的域创建 iframe

您的数据域需要监听message 事件:

document.addEventListener("message", handler, useCapture);

处理程序将负责访问localStorage 并将其内容发布到源域

您的源域可以使用postMessage API 在数据域上调用handler 函数 https://developer.mozilla.org/en-US/docs/DOM/window.postMessage

为了您的数据安全,您可以使用 HTTP 标头 X-Frame-Options ALLOW-FROM uri https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options?redirectlocale=en-US&redirectslug=The_X-FRAME-OPTIONS_response_header

希望它会有所帮助。

【讨论】:

以上是关于是否可以使用 HTML5 本地存储在不同站点的页面之间共享数据?的主要内容,如果未能解决你的问题,请参考以下文章

H5离线缓存技术

HTML5 本地存储 - 存储和加载已下载一次的 CSS

HTML5 本地存储 - 我可以为每个键存储多个值,如果不能,我可以使用啥替代方案?

Android 上怎么访问本地 HTML 网页

HTML5 中的本地存储、会话存储、Web 存储、Web 数据库和 cookie

h5离线缓存