2012-08-30 9 views
0

suis un débutant, en essayant d'écrire une extension de base. Pour que mon extension fonctionne, j'ai besoin d'initialiser certaines données, donc ce que j'ai fait est dans mon background.js j'ai déclaré quelque chose comme ça.Où initialiser les données liées à l'extension

localStorage["frequency"] = 1; //I want one as Default value. This line is not inside any method, its just the first line of the file background.js 

Les utilisateurs peuvent goto page Options et modifier cette variable ci-dessus pour toute valeur à l'aide de l'interface graphique. Dès que l'utilisateur le modifie dans l'interface utilisateur, mettre à jour cette valeur.

Maintenant, le problème est que le background.js se recharge à chaque redémarrage de la machine. Donc, chaque fois que je redémarre mon ordinateur et ouvre Chrome, la valeur de fréquence est ramenée à 1. Pour éviter cela, où j'ai besoin d'initialiser cette valeur?

Répondre

1

Vous pouvez simplement utiliser une clé par défaut spécifique. Donc, si frequency n'est pas défini, essayez default-frequency. Les clés par défaut sont ensuite définies ou définies dans background.js.

J'aime le faire en une seule étape, dans une fonction comme celle

function storageGet(key,defaultValue){ 
    var item = localstorage.getItem(key); 
    if(item === null)return defaultValue; 
    else return item; 
} 

(Selon le specification localStorage doit retourner null si aucune valeur n'a été fixée.) Donc, pour votre cas, il regarderait quelque chose comme

var f = storageGet("frequency",1); 

de plus, vous pourriez être intéressé à vérifier le chrome.storage API. Il est similaire à localstorage mais fournit des fonctionnalités supplémentaires qui pourraient être utiles pour votre extension. En particulier, il prend en charge pour synchroniser les données de l'utilisateur à travers différents navigateurs de chrome.

modifier J'ai modifié l'instruction if en ce qui concerne l'objection d'apsillers. Mais puisque la spécification indique qu'elle devrait être nulle, je pense qu'il est logique de vérifier cela au lieu de non défini.

+1

+1, cependant, vous pouvez Si vous voulez utiliser 'if (typeof item! =" undefined ")' dans votre vérification, si 'getItem' est [wrapped pour supporter le stockage d'objets] (http://stackoverflow.com/a/2010948/710446) et les magasins de programme 'false' (ou n'importe quelle valeur [falsey] (http://stackoverflow.com/questions/3982663/falsey-values-in-javascript)), la récupération échouera et utilisera la valeur par défaut – apsillers

+0

Merci pour la réponse rapide Va essayer de mettre en œuvre – Srikanth

+0

@LeoR Droit, bonne prise! sur une clé inexistante donne 'undefined', alors que l'accès à la fonction donne' null', comme vous l'avez dit. – apsillers

0

Je pense que le problème réside dans votre syntaxe. Pour obtenir et définir vos valeurs localStorage essayez d'utiliser ceci:

// to set 
localStorage.setItem("frequency", 1); 

// to get 
localStorage.getItem("frequency"); 
+2

'' getItem' et setItem' sont pratiquement identiques à accès à la propriété. La seule différence triviale est que l'accès aux propriétés ne peut pas stocker de façon persistante sur les clés qui sont les noms des propriétés existantes de localStorage (par exemple, 'localStorage [" getItem "] =" foo "' ne persiste pas, mais localStorage.setItem ("getItem" "Une autre différence est que les fonctions peuvent être encapsulées pour écraser leur comportement par défaut, par exemple pour JSONify un objet avant le stockage – apsillers

+0

Ah oke, merci pour la tête! –

1

Ceci est une autre solution:

// background.js 

initializeDefaultValues(); 

function initializeDefaultValues() { 
    if (localStorage.getItem('default_values_initialized')) { 
     return; 
    } 

    // set default values for your variable here 
    localStorage.setItem('frequency', 1); 

    localStorage.setItem('default_values_initialized', true); 
} 
+0

y a-t-il une erreur de syntaxe ici? localStorage.setItem ('frequency') = 1; show Uncaught ReferenceError: Invalid left-hand dans l'affectation, donc je l'ai changé en localStorage.setItem ['frequency'] = 1; aucune erreur affichée, mais aucun élément n'est stocké dans localStorage.Essayé localStorage ['frequency'] = 1; travaillé et affiché dans localStorage. Est-ce que je fais quelque chose de mal? – Srikanth

+0

Pas de soucis cela a fonctionné. localStorage.setItem ("fréquence", 1); – Srikanth

+0

Merci de votre avis sur l'erreur de syntaxe. Fixé. –

Questions connexes