【问题标题】:How to save data in localStorage that will stay there we close the browser?如何将数据保存在 localStorage 中,我们关闭浏览器后会留在那里?
【发布时间】:2017-10-15 22:49:38
【问题描述】:

我编写了以下脚本并在控制台中运行它:

var data = "dfsfds";
localStorage.getItem("data");
localStorage.setItem("data",data);

然后,我关闭了浏览器并重新打开它。当我输入控制台时:

localStorage.getItem("data");

我得到“未定义”。

我认为本地存储应该在浏览器关闭后留在浏览器内存中。为什么不在这里发生?

【问题讨论】:

  • 你也可以使用cookies。

标签: javascript google-chrome local-storage


【解决方案1】:

您必须从从域加载的页面运行此代码。这意味着代码必须在通过 HTTP 访问的服务器上运行。这就是浏览器将一个站点的localStorage 数据与另一个站点分开的方式。

下面的代码显示了如何执行此操作,但由于沙盒,它在 Stack Overflow sn-p 环境中不起作用。您可以看到一个工作版本 here。填写你的名字,然后点击按钮,复制网址,关闭浏览器,然后打开一个新的浏览器标签页,返回页面。

window.addEventListener("DOMContentLoaded", function(){

  var g1 = document.querySelector(".greeting1");
  var g2 = document.querySelector(".greeting2");
 
  // Check localStorage to see if the user has already told us their name
  var name = localStorage.getItem("name");
  if(name){
    // Put the name into the <span>
    document.getElementById("user").textContent = name;
    
    // Hide the initial greeting and show the welcome back greeting
    g1.classList.add("hide");
    g2.classList.remove("hide");

  } else {
    // Show the initial greeting and hide the welcome back greeting
    g1.classList.remove("hide");
    g2.classList.add("hide");  
  }

  // Set up a click event handler for the button
  var btn = document.querySelector("button");
  btn.addEventListener("click", function(){
    // When the button is clicked, save the value from the textbox into localStorage
    localStorage.setItem("name", document.querySelector("input").value);
  });
  
});
.hide { display:none; }
<div class="greetings">
  <div class="greeting1">
    <p>Please enter your name: <input type="text"><button>Save my name</button></p>
  </div>
  <div class="greeting2 hide">
    <p>Welcome back <span id="user"></span></p>
  </div>
</div>

【讨论】:

  • “代码必须运行在通过 HTTP 访问的服务器上”是不正确的。即使从本地计算机打开 HTML 文件,临时存储也可以工作。
  • @Dale 仅当您通过本地运行的服务器访问该本地文件时。 localStorage 没有服务器就无法工作。 developer.mozilla.org/en-US/docs/Web/API/Window/…
  • 请在您的本地驱动器上创建一个包含以下内容的文件并打开它。它将成功存储到本地存储并检索。运行一次后,删除 setItem 调用,它仍然有效。
  • @Dale 我已经纠正了。在我发布此答案时,不支持 localStorage,除非您使用的是 HTTP/HTTPS 协议。
  • 感谢您确认 Scott。你想编辑答案吗?我会,但我不确定这里的 stackoverflow 协议/礼仪是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 2018-08-01
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 2019-10-03
相关资源
最近更新 更多