gpt4 book ai didi

javascript - firefox 13.0跨域访问localStorage : Error: The operation is insecure

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:49:40 30 4
gpt4 key购买 nike

今天我将我的 Firefox 升级到 13.0。但是我的 javascript 代码出了点问题。

有网页A(www.xx.com)和网页B(webim.xx.com)。我使用 iframe 标签将 B 嵌入到 A 中。

网页A

先设置域名为'xx.com'

<script>document.domain = 'xx.com';</script>

然后创建一个iframe来加载网页B。

<script>
var iframe = document.createElement('iframe');
document.body.insertBefore(iframe, document.body.firstChild)
iframe.src = 'http://webim.xx.com';
</script>

网页B设置域名为'xx.com'

<script>document.domain = 'xx.com';</script>

然后访问网页B的localStorage。

在网页A,执行代码:

window.iframe.contentWindow.localStorage.setItem('a', 'a')

然后会报错:

Error: The operation is insecure.

在之前的版本或其他浏览器中,代码可以正常执行。

有人知道为什么吗?

这是一个错误?

还有..如何解决这个问题?谢谢。


刚才我找到了解决这个问题的方法。

我不能直接访问localStorage,但是可以调用iframe的函数可以调用自己网页的localStroage。

/// webpage B
<script>
document.domain = 'xx.com';
var ls = { ///< ls is short for localStorage.
setItem: function(k, v) {
return localStorage.setItem(k, v);
},
getItem: function(k) {
return localStorage.getItem(k);
},
removeItem: function(k) {
return localStorage.removeItem(k);
},
clear: function(){
return localStorage.clear();
}
}
</script>

然后我调用 ls.setItem 等来访问 iframe 的 localStorage。

/// webpage A
<script>iframe.ls.setItem('a', 'b');</script>

虽然我可以解决这个问题,但为什么 firefox 13.0 会导致这个问题?

最佳答案

旧的 Firefox 行为存在错误,错误已得到修复。根据规范,设置 document.domain 应该对 localStorage 的行为绝对没有影响,因此在您的情况下,您试图为不同的域设置 localStorage,这是不允许的。

参见 https://bugzilla.mozilla.org/show_bug.cgi?id=495337和 localStorage 规范的详细信息。

关于javascript - firefox 13.0跨域访问localStorage : Error: The operation is insecure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929337/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com