编辑。我很担心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
http://localhost:8080
。删除所有本地存储(如果有)。测试2
http://localhost:8080
。删除所有本地存储(如果有)。结果如下:
Firefox产生的结果感觉非常混乱。为什么在正常模式下A = 1,为什么在私人模式下C = 2?如果不同的选项卡在正常模式下共享相同的存储区域,但在私有模式下共享不同的存储区域,我们应该在正常模式下A = 2,在私有模式下C = 1。
所以,我的问题是,这是Firefox中的一个错误。如果这是合法的,那么本地存储在Firefox上的确如何运作?这个网站上有一个类似的问题(“Fail to read localStorage”),但在这个问题上,所涉及的文件来自不同的来源。