2013-03-18 64 views
0

使用JavaScript,是否可以將頁面上的所有變量保存到本地存儲,然後在頁面刷新或重新加載時重新加載存儲的變量?我試圖將變量保存到本地存儲並在刷新頁面時加載它們。這是我到目前爲止已經試過:保存頁面上的所有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

檢查了這一點:http://stackoverflow.com/questions/2226007/fetching-all-javascript-global-variables-in-a-page – Stegrex 2013-03-18 18:50:15

+0

'for(prop in window){console.log(prop); }'現在你擁有了所有的變量。儘管跨瀏覽器兼容性不佳。 – Vinay 2013-03-18 18:50:58

+0

@rid我想保存整個頁面的狀態,包括所有的JavaScript對象。 Stack Overflow已經有幾個關於保存網頁狀態的問題,但唯一討論的是保存DOM的狀態,並且他們都沒有討論保存JavaScript變量。 – 2013-03-18 18:51:50

回答

1

排序的。如果你關心的變量都是全球性的,並且不依賴於任何非全局數據,你可以看看這個問題:Fetching all (javascript) global variables in a page (Thanks Stegrex)

但是,那不是整個故事。在JS中,很多數據都保存在隱藏的作用域中。這有兩個問題:

  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; 
} 
+0

我想只保存絕對需要的變量會更好。那麼我怎樣才能在頁面卸載時將我需要的變量保存到本地存儲? – 2013-03-18 19:05:02

+1

只需編寫:'localStorage.someKey = someValue',然後閱讀:'var someValue = localStorage.someKey' – 2013-03-18 19:06:46

+2

@AlexWayne至少推薦使用標準方法 - 'getItem'和'setItem' – Ian 2013-03-18 19:20:02

相關問題