web-dev-qa-db-fra.com

chrome.storage.local.get et set

J'essaie d'utiliser chrome.storage.local Dans mon extension, et cela ne semble pas fonctionner. J'ai utilisé localStorage mais je me suis rendu compte que je ne pouvais pas l'utiliser dans des scripts de contenu sur plusieurs pages.

Donc, voici ce que je suis venu avec:

function save()
{
    var channels = $("#channels").val();
    var keywords = $("#keywords").val();

    chrome.storage.local.set({'channels': channels});
    chrome.storage.local.set({'keywords': keywords});
}

Je crois que je fais bien la save(), mais le problème se pose dans load():

function load()
{
    var channels = "";
    chrome.storage.local.get('channels', function(result){
        channels = result;
        alert(result);
    });

    var keywords = "";
    chrome.storage.local.get('keywords', function(result){
        keywords = result;
        alert(result);
    });

    $("#channels").val(channels);
    $("#keywords").val(keywords);
}

Lorsque les alertes se déclenchent, il affiche [object Object]. Pourquoi donc? Qu'est-ce que je fais mal? J'ai regardé la documentation/les exemples, mais je n'arrive pas à identifier le problème.

46
user569322

Ce code fonctionne pour moi:

function load() {
    var channels = "";
    var keywords = "";
    chrome.storage.local.get('channels', function (result) {
        channels = result.channels;
        alert(result.channels);
        $("#channels").val(channels);
    });
} 

Chrome.storage.local.get () renvoie un objet avec des éléments dans leurs mappages clé-valeur, vous devez donc utiliser l'index de la clé dans votre modèle de recherche.

LUTIN:

Merci à Rob d’avoir identifié: Chrome.storage.local.get () est asynchrone , vous devez modifier votre code pour vous assurer qu'il fonctionne une fois que callback () a abouti.

Faites-moi savoir si vous avez besoin de plus d'informations.

62
Sudarshan

déboguer ou utiliser

alert(JSON.stringify(result));

pour plus de détails sur ce que vous récupérez

7
7zark7

La valeur "result" que vous utilisez est un objet contenant la valeur de stockage, pour obtenir la valeur à utiliser result.keywords, qui obtiendra la valeur des mots-clés. EX:

function load(){
  chrome.storage.local.get('keywords', function(result){
    var keywords = result.keywords;
    alert(keywords);
  });

  chrome.storage.local.get('channels', function(result){
    var channels = result.channels;
    alert(channels);
  });
}
1
Mdbook