Firefox 中的“localStorage”是否仅在页面在线时工作?

IT技术 javascript firefox safari html
2021-03-15 09:15:21

所以我在玩弄 HTML 5 和 localStorage 并且我注意到我的值只有在我在本地主机上的 Firefox 中运行页面时才会被存储(即http://127.0.0.1:8000/test/index.html )。 html ),但是当我在本地运行文件 (file:///C:/test/index.html) 时,我的值不会被存储。Safari 4 对这两种设置都没有问题。那么有人知道这是否是设计 -> Mozilla 开发人员中心上的 DOM 存储

(Firefox 2 允许访问域层次结构中比当前文档更高的存储对象。出于安全原因,Firefox 3 不再允许这样做。此外,已从 HTML 5 规范中删除了这一提议的 HTML 5 附加内容,以支持localStorage,在 Firefox 3.5 中实现。)

或者如果有解决方法?
我想知道因为只能在线工作的离线存储听起来很愚蠢:P

如果有人想知道,代码很简单:

function save()
{
 localStorage.setItem('foo','bar');
}

function load()
{
 var test = localStorage.getItem('foo');
 alert(test);
}
3个回答

这似乎是一个错误: 错误 507361 - localStorage 在 file:/// 文档中不起作用
希望很快得到修复!

2011-09-13:错误修复,在“Mozilla8”中实现。我用 Firefox 8 对此进行了测试,现在可以使用了。

同时,您可以使用 Chrome 离线测试您的脚本,因为它没有这个错误。
2021-04-24 09:15:21
现在无法检查,但我认为这是最终答案!
2021-05-04 09:15:21

嗯,链接的文件确实说

localStorage 与 globalStorage[location.hostname] 相同,除了范围为 HTML5 源(方案 + 主机名 + 非标准端口)

我不想声称我 100% 理解这意味着什么,但括号中的位表明 URL 需要具有某些属性 - 特别是方案和主机名是 Firefox 认为的 HTML 5 来源。我怀疑file:///URL 与此不匹配,而您的http://127.0.0.1/匹配

编辑:查看 W3C对 Origin 属性描述,第 7 步看起来可能是导致问题的原因。根据localStorage处理的实现方式,它可能期望第 12 步返回的 3 元组,但对于file://URL,返回值可能是任何东西。

所以,呃,我想这是设计使然。 仔细想想,这很可能不是故意的。没有理由不localStorage 应该file://URL工作这可能只是一个浏览器特定实现的输出与另一个浏览器的期望不匹配的情况。

至于解决方法,globalStorage不会在这里做你想做的吗?

截至 2020 年 10 月 5 日,Firefox 上的 localStorage 似乎再次被破坏。试试这个:

  1. 下载 Mozilla 演示页面:https : //mdn.github.io/dom-examples/web-storage/
  2. 将动物/颜色更改为默认值以外的其他内容。
  3. 关闭页面的选项卡(或浏览器)。
  4. 重新下载页面。它恢复到默认值。(Firefox 81:0 等)

更糟糕的是,如果您执行上面的第 1 步和第 2 步,然后在新选项卡中打开演示的另一个副本,不仅新选项卡无法获取保存的数据,而且原始演示页面(刷新)已返回到默认值;好像新选项卡在保存的数据上执行。