2011-12-19 15 views
0

現在、Chrome拡張機能を作成していますが、私は最後にユーザーの設定を保存しています。
Local Storageが文字列を格納することはわかっていますが、この段階では文字列を使用するだけで迷うことになりますが、ストレージ要件が大きくなるにつれて2次元アレイが必要になります。 Local Storageは配列を格納することができませんが、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、title、urlを同じ行に格納できますか?ですから、最初の項目に 'menuItemId = websitesarray [0,1];' 'title = websitesarray [1,1];'と 'url = websitesarray [1,2];を使うことができますか? –

+0

いいえ、これは配列を1つの 'localstorage'スロットに格納できるように配列を文字列に/から変換する方法です。 JavaScriptは多次元配列を直接サポートしていないため、別の解決策が必要です。 (最もクリーンなソリューション:オブジェクト、最も単純なソリューション:タイトル、URL、IDのための別々の配列) – duskwuff

+0

迅速な返答をありがとう。今のところ、私は3つの配列を持っています(ユーザーがこれを望んでいるかどうかを見たいと思っています)。そして、オブジェクトを使って少し掃除します。一度、もう一度、ありがとう、良い一日を。 –