localStorage如何在Firefox上运行?

时间:2017-12-08 02:33:55

标签: javascript firefox local-storage

编辑。我很担心localStorage是如何沙箱化的。我在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>

现在我npm install -g http-server,从文件夹中运行http-server,然后在Firefox上执行以下测试。根据评论中的建议,我在Firefox 57.0.1上创建了一个新的配置文件,以执行以下测试。我也在Firefox Nightly上运行测试,结果是一样的。

测试1

  1. 在非隐私浏览模式下,转到“标签1”上的http://localhost:8080。删除所有本地存储(如果有)。
  2. 单击按钮十次,将按钮数增加到10。
  3. 按住Command键并点击网页上的链接,在新标签页上打开同一页面(“标签2”)。
  4. 关闭标签1。
  5. “刷新”选项卡2.此时表示按钮计数 X
  6. 测试2

    1. 在非隐私浏览模式下,转到“标签1”上的http://localhost:8080。删除所有本地存储(如果有)。
    2. 点击一次按钮。
    3. Cmd-点击以在新标签页上打开同一页面(“标签2”)。
    4. 转到标签1上的Google。
    5. 单击选项卡2上的按钮一次。
    6. 按下选项卡1上的后退按钮并刷新选项卡1.分别用 A B 表示选项卡1和选项卡2上的按钮计数。
    7. 单击选项卡2上的按钮一次。然后刷新选项卡1.分别用 C D 表示选项卡1和选项卡2上的按钮计数。
    8. 结果如下:

      • 正常模式下的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中的一个错误。如果这是合法的,那么本地存储在Firefox上的确如何运作?这个网站上有一个类似的问题(“Fail to read localStorage”),但在这个问题上,所涉及的文件来自不同的来源。

0 个答案:

没有答案