2

Chrome 拡張機能の localStorage ではなく、chrome.storage API を使用してユーザーの設定を保存したいと考えています。

現在、私の options.js (localStorage と JSON を使用) ファイルは次のようになっています。

$(function(){ //jQuery Ready

// INIT
$("#notifysav").hide();

// STORAGE
if(localStorage['options']){
    var o = JSON.parse(localStorage['options']);
    $("#option1").attr('checked', o.option1);
            $("#option2").attr('checked', o.option2);
    .... [list of options]
}

// Save Button Click event
 $("#save").live('click', function(){
    localStorage['options'] = JSON.stringify({
        "option1":$("#option1").attr('checked'),
        "option2":$("#option2").attr('checked'),
        .... [list of options]
    });
            // notification
    $("#notifysav").fadeIn("slow").delay(2000).fadeOut("slow");
            // reload to apply changes
    chrome.extension.sendRequest({action: 'reload'});
});

});// #jQuery ready

私の質問は、現在のコードを chrome.storage API を使用するように変換する方法です。私が理解していることから、これらの変更を適用します。

$(function(){

// INIT
var storage = chrome.storage.sync;
$("#notifysav").hide();

// Load Options
loadOptions();

// Save Button Click Event
$("#save").live('click',function(){ saveOptions(); });

function loadOptions() {
     storage.get(         /* Something */           )
}


 function saveOptions() {

 var option1 = $("#option1").attr('checked');
 var option2 = $("#option2").attr('checked');

  storage.set({"option1":option1,"option2":option2}, function() {
   // Notification
   $("#notifysav").fadeIn("slow").delay(2000).fadeOut("slow");
   // Reload Event to apply changes
   chrome.extension.sendRequest({action: 'reload'});
   });
     }
});

ご協力いただきありがとうございます!

4

2 に答える 2

4

私の理解が正しければ、主な問題はストレージからデータを取得する方法です。できることは次のとおりです。

chrome.storage.local.get(null, function(all){console.log(all)});

すべてのキーと値がストレージに格納されたオブジェクトを返します。あなたの場合、次のように出力されます。

Object {option1: "value1", option2: "value2"}

また、キーの 1 つだけを取得することもできます。

chrome.storage.local.get("optionkey", function(all){console.log(all)});

またはキーの配列:

chrome.storage.local.get(["opt1", "opt2"], function(all){console.log(all)});

いずれにせよ、キー名だけでコールバック内のデータにアクセスできます。

于 2012-12-29T18:30:10.947 に答える
0

お返事をありがとうございます。元のコードを次のように変更することで、最終的に何かを機能させることができました。

$(function(){

 // INIT
 const storage = chrome.storage.sync;
 var options = new Array(); 

 $("#notifysav").hide();

 loadOptions();

 // STORAGE

  // Save Button Click event
  $("#save").live('click', function(){ saveOptions(); });

function loadOptions() {
  storage.get('options', function(o) { 

     $("#option1").attr('checked', o.options[0]);
     $("#option2").attr('checked', o.options[1]);
     ...
    });
 }

function saveOptions() {
     options[0] = $("#option1").prop('checked');
     options[1] = $("#option2").prop('checked');
     ...

//console.log(options);

     storage.set({'options':options},function(){
       $("#notifysav").fadeIn("slow").delay(2000).fadeOut("slow");
       chrome.extension.sendRequest({action: 'reload'});
      });
    }

  });
于 2012-12-29T18:45:13.943 に答える