我看到一个问题,根据我的阅读,不应该发生。简而言之,我有一个嵌套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。实际上,只要面板在浏览器上打开,就会出现这种情况,并且每个版本的Panel都有一个轮询功能,用于在localStorage中查找已更改的数据。
然而,localStorage似乎没有正确完成工作。在一个面板上对localStorage的更改未反映在其对应的中。这似乎很奇怪,因为我的理解是localStorage将由具有相同来源的所有页面共享。这两个面板绝对是同一个来源:它们实际上是相同的URL,只是具有不同的查询参数。
任何人都知道为什么会出现这种情况?我查看了localStorage字典,它们内部有完全不同的数据(例如,一个有urlparam1,另一个有urlparam2-它们都应该有相同的数据,两个值都可用)。我无法想到为什么会出现这种情况。起源相同(包括协议)。我一直在测试的浏览器是FireFox和Chrome(主要是FireFox)。
编辑:作为更新,似乎可能是由于otherside.duh构建的iframe设置。他们允许脚本,但可能不允许allow-same-origin
。 (来源:https://readable-email.org/list/whatwg/topic/cross-origin-iframe-and-sandbox-allow-same-origin)这似乎是在许多较旧的网站上建议的,因为它表明如果同时启用了allow scripts
和allow-same-origin
,则iframe可以删除自己的sandbox
属性。这仍然是真的(消息来源是2013年)?因为这听起来像是一个非常糟糕的设计决定,如果是这样的话。我无法想象为什么有人会希望这是理想的行为。为了澄清allow-same-origin
的作用,它是
如果您不允许同源,则内容最终会以独特的来源结束,而不是其真实的"原点。
所以,好像你的框架在某个任意网站上运行,而不是你实际使用的网站。