Javascript 本地存储在Firefox上是如何工作的?

Javascript 本地存储在Firefox上是如何工作的?,javascript,firefox,local-storage,Javascript,Firefox,Local Storage,编辑。我对本地存储是如何沙盒的感到困惑。我在MacBook Air上创建了一个文件夹和一个简单的网页,而没有绑定任何其他文件。该网页只有一个按钮和指向同一页面的链接。单击按钮时,按钮计数从本地存储器读取,增加1,增加的值使用相同的键写入本地存储器: <!DOCTYPE html> <head> <script> function getCount() {return parseInt(localStorage.getItem("count") ||

编辑。我对本地存储是如何沙盒的感到困惑。我在MacBook Air上创建了一个文件夹和一个简单的网页,而没有绑定任何其他文件。该网页只有一个按钮和指向同一页面的链接。单击按钮时,按钮计数从本地存储器读取,增加1,增加的值使用相同的键写入本地存储器:

<!DOCTYPE html>
<head>
  <script>
    function getCount() {return parseInt(localStorage.getItem("count") || 0)}
    function incCount() {localStorage.setItem("count", getCount()+1)}
    function setText() {document.getElementById("btn").innerHTML = getCount() + " clicks"}
  </script>
</head>
<body onpageshow ="setText()">
  <button id="btn" onclick="incCount(); setText()">clicks</button>
  <a href="/">open the same page</a>
</body>

函数getCount(){return parseInt(localStorage.getItem(“count”)| | 0)}
函数incCount(){localStorage.setItem(“count”,getCount()+1)}
函数setText(){document.getElementById(“btn”).innerHTML=getCount()+“单击”}
咔哒声
现在我
npm安装-ghttpserver
,从文件夹中运行
httpserver
,并在Firefox上执行以下测试。根据评论中的建议,我在Firefox 57.0.1上创建了一个新的配置文件,以进行以下测试。我还每晚在Firefox上运行测试,结果是一样的

测试1

  • 转到
    http://localhost:8080
    在非私人浏览模式下打开“选项卡1”。删除所有本地存储(如果有)
  • 单击按钮十次可将按钮计数增加到10
  • 命令单击网页上的链接,在新选项卡上打开同一页(“选项卡2”
  • 关闭选项卡1
  • 刷新选项卡2。表示此时的按钮计数X
  • 测试2

  • 转到
    http://localhost:8080
    在非私人浏览模式下打开“选项卡1”。删除所有本地存储(如果有)
  • 单击按钮一次
  • Cmd单击可在新选项卡上打开同一页(“选项卡2”
  • 转到谷歌的标签1
  • 单击选项卡2上的按钮一次
  • 按下选项卡1上的后退按钮并刷新选项卡1。通过AB分别表示选项卡1和选项卡2上的按钮计数
  • 单击选项卡2上的按钮一次。然后刷新选项卡1。用CD分别表示选项卡1和选项卡2上的按钮计数
  • 结果如下:

    • Firefox在正常模式下:(X,A,B,C,D)=(10,1,2,3,3)
    • Firefox在私人浏览模式下:(X,A,B,C,D)=(0,1,1,2,2)
    • Chrome(正常或私有模式)或Safari(仅限正常模式;我无法在私有模式下将任何内容放入本地存储):(X、A、B、C、D)=(10,2,2,3,3)
    Firefox产生的结果感觉非常混乱。为什么A=1处于正常模式,为什么C=2处于专用模式?如果不同的选项卡在正常模式下共享相同的存储区域,但在专用模式下共享不同的存储区域,那么我们应该在正常模式下使用A=2,在专用模式下使用C=1


    所以,我的问题是,这是Firefox中的一个bug吗。如果这是合法的,那么本地存储在Firefox上究竟是如何工作的呢?在这个网站上有一个类似的问题(“”),但在这个问题上,涉及的文档来自不同的来源。

    您使用的是什么版本的Firefox?在57.0 64位Windows上,行为与您描述的完全相同。如果您使用的是私人浏览,我相信Firefox会为每个选项卡使用存储范围。您能检查事件是否有效吗<代码>窗口.addEventListener('storage',函数(event){if(event.key=='count')document.getElementById(“btn”).innerHTML=event.newValue+“clicks”})@user740006您所描述的可能是一个bug。您是否可以尝试安装早期版本(或夜间版本)并查看问题是否仍然存在?此外,对于私人浏览和本地存储,请参考以下内容:在FF中,它被视为会话存储(每个选项卡)@nipuna777谢谢。我稍后会尝试(我现在使用的是慢速公共wifi),看看会发生什么。尝试创建一个新的Firefox配置文件(运行
    Firefox-P
    打开配置文件切换器),看看新配置文件上是否仍然存在问题。这将消除可能的隐私设置和扩展。