Javascript HTML5 localStorage在不同的帧中显示不同的数据(同一域)

Javascript HTML5 localStorage在不同的帧中显示不同的数据(同一域),javascript,html,iframe,local-storage,Javascript,Html,Iframe,Local Storage,据我所知,我看到了一个不应该发生的问题。简而言之,我有一个带有嵌套iframe的web应用程序。框架集装箱船如下图所示: http://mysite.doh https://othersite.duh https://mysite.doh/Panel.html?urlparam1=x https://mysite.doh/Panel.html?urlparam2=y 注意:我在指明http与https时很小心,因为协议是同源策略的一部分。这些确实是HTTP主页内

据我所知,我看到了一个不应该发生的问题。简而言之,我有一个带有嵌套iframe的web应用程序。框架集装箱船如下图所示:

http://mysite.doh
    https://othersite.duh
        https://mysite.doh/Panel.html?urlparam1=x
    https://mysite.doh/Panel.html?urlparam2=y
注意:我在指明http与https时很小心,因为协议是同源策略的一部分。这些确实是HTTP主页内的HTTPS IFrame。当Panel.html打开时,它尝试记录两个查询参数,以便它的两个面板也知道这些参数。所以有这样的代码:

urlparam1 = $.urlParam('urlparam1 ');
if (urlparam1 == null || urlparam1 == ''){
    urlparam1  = localStorage.getItem("urlparam1");
} else {
    localStorage.setItem("urlparam1", urlparam1);
}
我的目标是将urlparam1的值传输到Panel.html的所有版本。实际上,每当在浏览器上打开面板时都会出现这种情况,并且每个版本的面板都有一个轮询功能,用于在localStorage中查找更改的数据

但是,localStorage似乎无法正确完成任务。对一个面板上的localStorage所做的更改不会反映在其对应面板中。这似乎非常奇怪,因为据我所知,本地存储将由具有相同来源的所有页面共享。这两个面板的来源完全相同:它们实际上是相同的URL,只是具有不同的查询参数

有人知道为什么会这样吗?我查看了localStorage字典,它们内部有完全不同的数据(例如,一个有urlparam1,另一个有urlparam2-它们都应该有相同的数据,两个值都可用)。我想不出为什么会这样。来源相同(包括协议)。我一直在测试的浏览器是FireFox和Chrome(主要是FireFox)

编辑:作为更新,这似乎是由于otherside.duh构建的iframe的设置造成的。它们允许使用脚本,但可能不允许使用
允许相同的源代码。(来源:)许多较旧的站点似乎都建议这样做,因为这表明如果同时启用了
允许脚本
允许相同来源
,iframe就可以删除自己的
沙盒
属性。这仍然是真的吗(消息来源是2013年)?因为这听起来像是一个非常糟糕的设计决策,如果是的话。我无法想象为什么有人会希望这是他们想要的行为。为了澄清
允许相同来源的功能,它是

如果您没有“允许相同来源”,则内容将以唯一来源结束,而不是其“真实”来源


因此,就好像您的框架运行在某个任意站点上,而不是您实际使用的站点上。

您是否总是通过查询字符串使用参数?或者仅仅是第二个域init和localStorage中的param?这两个链接都有查询参数,但不一定相同。此代码的目的是能够同步最初在一个面板上而不是在另一个面板上设置的某些面板值。您需要使用存储事件。在这种情况下需要哪些存储事件?据我所知,localStorage是一个共享对象,一旦发生更改,访问它的所有实体都应该立即更改它。不是这样吗?您是否总是通过查询字符串使用参数?或者仅仅是第二个域init和localStorage中的param?这两个链接都有查询参数,但不一定相同。此代码的目的是能够同步最初在一个面板上而不是在另一个面板上设置的某些面板值。您需要使用存储事件。在这种情况下需要哪些存储事件?据我所知,localStorage是一个共享对象,一旦发生更改,访问它的所有实体都应该立即更改它。不是这样吗?