1

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();
4

1 に答える 1

1

ある種。関心のある変数がすべてグローバルであり、非グローバルデータに依存していない場合は、次の質問を確認できます。ページ内のすべての(javascript)グローバル変数を取得する (Thanks Stegrex)

しかし、それだけではありません。JSでは、多くのデータが非表示のスコープに保持されます。これには2つの問題があります。

  1. グローバルスコープからオブジェクトにアクセスできない場合があります。
  2. 関数は、それらが作成されたスコープ内のデータに依存する場合がありますが、グローバルスコープからはアクセスできません。

例えば:

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クロージャにあり、隠されており、グローバルスコープからアクセスできません。オブジェクトの内部状態を検査して保存するためのよりインテリジェントな方法がなければ、この構造を保持することはできません。


したがって、おそらくこれはあなたが採用したいアプローチではありません。私はあなたがやりたいことをするためのはるかにクリーンな方法があるのに良いお金を賭けるでしょう。したがって、質問は次のようになります。なぜこれが必要なのですか?そして、あなたは何をしようとしていますか?

必要なデータだけを明示的に保存し、ブルートフォースでユニバース全体を保存しようとしないことを強くお勧めします。

あなたの場合、それは単純です:

function saveOnlyImportantVaiables() {
  localStorage.theName = theName;
  localStorage.currentTime = currentTime;
}
于 2013-03-18T19:00:24.480 に答える