保存页面上的所有JavaScript变量

时间:2013-03-18 18:48:08

标签: javascript local-storage

使用JavaScript,是否可以将页面上的所有变量保存到本地存储,然后在刷新或重新加载页面时重新加载存储的变量?我正在尝试将变量保存到本地存储并在刷新页面时加载它们。这是我到目前为止所尝试的:

http://jsfiddle.net/jZVWk/1/

function saveAllVariables(){
    //save all variables on the page to local storage
}

function loadAllVariables(){
    //load all variables on the page from local storage, and re-create them using their original names
}

loadAllVariables(); //load all variables that were previously stored

if(typeof theName == "undefined"){
    var theName = prompt("Please enter your name:","Your name");
}

if(typeof currentTime == "undefined"){
    var currentTime = new Date();
}

document.body.innerHTML += "Time last visited: " + currentTime + "<br />";
document.body.innerHTML += "Your name : " + theName + "<br />";
var currentTime = new Date();

1 个答案:

答案 0 :(得分:1)

排序。如果您关心的变量都是全局变量,并且不依赖于任何非全局数据,那么您可以查看以下问题:Fetching all (javascript) global variables in a page (感谢Stegrex)

但这不是整个故事。在JS中,许多数据都存在于隐藏的范围中。这有两个问题:

  1. 可能无法从全局范围访问对象。
  2. 功能可能取决于创建它们的范围内的数据,但无法从全局范围访问。
  3. 例如:

    var globalThing = 'global';
    var makeCounter = function() {
      var count = 0;
      return {
        increment: function() { count++; },
        getCount:  function() { return count; }
      }
    }
    var counter = makeCounter();
    counter.increment();
    alert(counter.getCount());
    

    现在无法从字面上保存和重构此代码的状态。 count处于封闭状态,隐藏在全局范围内,无法访问。如果没有更智能的方法来检查和保存对象的内部状态,则无法保留此结构。


    所以也许这不是你想采取的方法。我敢打赌,有一种更清洁的方式来做你想做的事。所以问题就变成了:你为什么需要这个?你还想做什么?

    我强烈建议您明确保存所需的数据,不要试图强行保存整个Universe。

    在您的情况下,这将是简单的:

    function saveOnlyImportantVaiables() {
      localStorage.theName = theName;
      localStorage.currentTime = currentTime;
    }