Firefox中的“localStorage”仅在页面在线时才有效吗?

时间:2009-09-29 14:33:40

标签: javascript firefox safari html5

所以我正在使用HTML 5和localStorage,我注意到当我在本地主机上的Firefox(即http://127.0.0.1:8000/test/index.html)中运行页面时,我的值才会被存储,但是当我运行时本地文件(file:/// C:/test/index.html)我的值不存储。 Safari 4在两种设置方面都没有问题。 那么有人知道这是否是设计 - > DOM Storage on the Mozilla Developer Center

  

(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 个答案:

答案 0 :(得分:23)

这似乎是一个错误:Bug 507361 - localStorage doesn't work in file:/// documents
希望很快就会解决!

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

答案 1 :(得分:21)

好吧,链接的文件说的是

  

localStorage与globalStorage [location.hostname]相同,但作用域为HTML5原点(方案+主机名+非标准端口)

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

编辑:查看W3C的description of the Origin property,第7步看起来可能会导致问题。根据{{​​1}}处理的实现方式,可能期望步骤12返回3元组,但对于localStorage URL,返回值可能几乎为任何东西。

所以,呃,我想这是设计的。经过反思,很可能这不是真的设计;没有理由file:// 不应localStorage网址工作。它可能只是一个浏览器特定实现的输出不符合另一个的期望的情况。

至于解决方法,file://会不会在这里做你想做的事情吗?

答案 2 :(得分:0)

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

  1. 下载Mozilla演示页面:https://mdn.github.io/dom-examples/web-storage/
  2. 将动物/颜色更改为默认值以外的其他颜色。
  3. 关闭页面的标签(或浏览器)。
  4. 再次下载页面。回到默认值。 (Firefox 81:0等)

更糟糕的是,如果执行上述第1步和第2步,然后在新选项卡中打开演示的另一个副本,则不仅新选项卡不会获取已保存的数据,而且原始演示页面(刷新)也已消失返回默认值;就像在存储的数据上新添加了一个标签一样。