2011-05-02 4 views
2

L'écriture et la lecture de LocalStorage fonctionnent correctement depuis mon popup et mon onglet. Toutefois, lorsque je tente d'ajouter une valeur à partir de ma page d'arrière-plan, il ne semble pas du tout écrire. Je visualise le stockage local dans les outils de développement Chrome en actualisant et en recherchant la valeur à afficher.Chrome Extension Local Storage: Background.html n'a pas accès à localstorage?

Dans l'exemple de code suivant pour background.html 'lastId' s'affiche correctement dans l'alerte lorsqu'un nouveau signet est ajouté. Cependant, la valeur n'est pas stockée. De plus, la demande d'une valeur connue semble échouer sans affichage d'alerte. (Les résultats sont les mêmes en essayant les deux syntaxes ci-dessous.)

<html> 
<script> 
// Grab the id of newly created bookmarks 
chrome.bookmarks.onCreated.addListener(function(id) { 
    var lastId = id; 
    alert(lastId); 
    localStorage['lastId'] = lastId; 
      var testvalue = localStorage['309']; 
    alert(testvalue); 
      localStorage.setItem('lastId', lastId); 
    var testvalue2 = localStorage.getItem('309'); 
    alert(testvalue2); 
}); 
</script> 
</html> 

Je continue à penser que je dois juste être une question manque petite de syntaxe ou quelque chose, mais ne vois rien. Si ma déclaration de manifeste était incorrecte, je ne pense pas que l'alerte fonctionnerait pour l'identifiant. Stumped ...

MISE À JOUR: Il s'avère que vous devez forcer le rechargement de l'extension sur les mises à jour des pages d'arrière-plan, car elles sont persistantes dans la mémoire du navigateur lorsqu'elles sont ouvertes. C'est pourquoi mon code enregistré semble ne pas fonctionner. Ce n'était pas rafraîchi et je suis vraiment embarrassé.

+0

S'il vous plaît répondez à votre propre question ou indiquez que quelqu'un répond correctement. Merci – hitautodestruct

+0

votant pour fermer –

Répondre

4

Hm, je peux penser à deux choses.

Vous dites que cela fonctionne dans un onglet et un popup. Ceci est très étrange car il ne devrait pas (si par onglet vous voulez dire le script de contenu). Les scripts de contenu ne peuvent accéder qu'à localStorage appartenant à un site auquel ils sont injectés. Les popups, les arrière-plans, les pages d'options et toute autre page du dossier de l'extension peuvent uniquement accéder au propre localStorage de l'extension. Ces deux entrepôts locaux et complètement séparés. Alors peut-être que vous inspectez localStorage incorrect?

Pour voir le localStorage de l'extension, vous devez inspecter la page contextuelle ou contextuelle et vérifier l'onglet des ressources dans l'inspecteur. Pour inspecter le site ou le script de contenu localStorage, vous devez ouvrir un inspecteur régulier sur la page.

Deuxième moment est votre affectation localStorage pourrait ne pas être ce que vous attendez.

Si vous exécutez:

var lastId = 5; 
localStorage['lastId'] = lastId; 

vous obtiendrez la valeur attribuée à 5lastId propriété. Donc, pour lire la valeur écrite que vous devez exécuter:

alert(localStorage['lastId']); //not localStorage['5'] 

Si vous voulez stocker des tableaux, vous auriez besoin de sérialisation/les unserialize par JSON comme localStorage peut stocker uniquement des chaînes.

+0

Salut Serg, merci pour vos réflexions. J'aurais dû préciser que, par tabulation, ce que je fais est en train de dépasser le template newtab par défaut. Ainsi, la page newtab et la fenêtre contextuelle écrivent et lisent à la fois à partir du même emplacement localstorage. Lorsque je tente le code que j'ai collé ici, et j'examine background.html via le lien sur la liste des extensions, les outils de développement Chrome ouverts et me montre également le contenu de la même localstorage. Donc, il semble qu'il identifie ce stockage comme s'appliquant à background.html. Je suis très confus ... – Korak

+0

@Korak Utilisez-vous Chrome 12? – serg

+0

Non, actuellement en utilisant 11 ... – Korak

Questions connexes