2011-12-19 83 views
0

我目前正在製作Chrome擴展程序,並且處於最後階段,存儲用戶首選項。
我知道本地存儲將存儲字符串,在這個階段,我只是使用字符串,但隨着存儲需求變大,需要2維數組。我已經看到本地存儲不能存儲數組,但可以使用JSON。我從來沒有使用過JSON,並且在看例子時,我不明白如何去做。在Chrome擴展程序中存儲數組

for (i=1;i<=localStorage["totalwebsites"];i++) { 
     // Get the title of the current item 
     var title = localStorage["websitetitle" + i]; 
     // Create the new context menu item, and get its menuItemId to store in the right localStorage string 
     var menuItemId = chrome.contextMenus.create({parentId: ParentID, title: title, contexts:["selection"], onclick: searchFromContext}); 
     // Store the created menu items menuItemId in the array so we know which item was chosen later on 
     websitesarray[menuItemId] = localStorage["websiteurl" + i]; 
    } 

正如你所看到的,當使用字符串時,這會變得非常混亂,非常快。我希望totalwebsites成爲數組中的項的計數,websitetitle和websiteurl將處於2個二維數組中。
我不明白你會如何做到這一點在JSON,或至少如何這可以永久存儲在Chrome本身。我猜你必須在某個點或某個地方將它轉換回本地存儲字符串?我不認爲我得到這個。
任何幫助/指針將不勝感激,我也找不到多少:(

回答

4

別擔心,JSON是超級容易假設你的網站存儲在websitesarray

// To load: 
websitesarray = JSON.parse(localstorage.websites); 

// To store: 
localstorage.websites = JSON.stringify(websitesarray); 

製作確定你有一個理智的方式來處理localstorage.websites還沒有設置的情況,因爲JSON.parse會拋出一個合適的,如果它的輸入爲空

+0

所以,只需要清楚,這些項目將被存儲在數組中爲了增加它們?如果是這樣,那真是太棒了。最後一件事,這可以是多維度的o我可以將menuItemId,標題和url存儲在同一行中?所以我可以使用'menuItemId = websitesarray [0,1];''title = websitesarray [1,1];'和'url = websitesarray [1,2];'爲第一項? – 2011-12-19 18:37:48

+0

不,這只是將數組轉換爲字符串或從字符串中轉換數據的一種方式,所以它可以存儲在一個'localstorage'插槽中。 JavaScript不直接支持多維數組,因此您仍然需要爲此提供單獨的解決方案。 (最乾淨的解決方案:對象。最簡單的解決方案:爲標題,URL和ID分開數組。) – duskwuff 2011-12-19 18:41:16

+0

感謝您的迅速回復。現在,我將擁有3個數組(我想知道用戶是否願意這麼做),然後通過使用對象來清理它。有一次,再次感謝你,祝你有美好的一天。 – 2011-12-19 18:44:59