7

J'ai commencé à écrire un script greasemonkey et je suis confronté à des problèmes d'exécution de localstorage dans le script Greasemonkey. La seule façon dont je pourrais comprendre localstorage dans GM est en créant une autre instance de Javascript dans la propriété DOM newElement.innerHTML, mais le reste de mes variables sont inaccessibles.LocalStorage dans Greasemonkey

Des idées? Voici le fragment de code Greasemonkey sur lequel je travaille.

 var testHref = anchorTag[i].href; 
    var testHTML = anchorTag[i].innerHTML; 
    var patHref = /item\?id=[0-9]*/g; 
    var patCaptureId = /item\?id=([0-9]*)/g; 
    var testId = patCaptureId.exec(testHref); 
    var patHTML = /[0-9]* comment(|s)/g; 
    var patHTML2 = /discuss/g; 
    if(patHref.test(testHref) && !patHTML.test(testHTML) && !patHTML2.test(testHTML)) 
    { 
     newElement = document.createElement('span'); 
     newElement.style.color = "#FF0000"; 
     newElement.innerHTML = "<a href=\"javascript:localStorage.setItem('one', 'rishabhVerma'); var test = localStorage.getItem('one'); console.log(test);\"> B</a>"; 
     anchorTag[i].parentNode.insertBefore(newElement, anchorTag[i].nextSibling); 
    } 
    i++; 

Répondre

7

hmm, unsafeWindow.localStorage ne fonctionne pas je suppose? Je sais que ce n'est pas un problème pour chrome d'obtenir le localStorage, jamais essayé sur Firefox pour être honnête.

+4

Je viens d'utiliser 'unsafeWindow.localStorage' dans un script Greasemonkey (dans Firefox 3.6 sur Mac) et qui semble fonctionner très bien. –

+1

Veuillez noter que l'utilisation de unsafeWindow permettra aux pages Web de détecter et éventuellement de minipuler graeasemonkey, si elle est capable d'intercepter les événements qui se produisent lorsque l'objet unsafeWindow est appelé. Cette information peut être vérifiée [ici] (https://www.safaribooksonline.com/library/view/greasemonkey-hacks/0596101651/ch01s13.html) – CoasterChris

9

Si vous avez juste besoin de stocker des valeurs, vous pouvez utiliser la méthode classique de Greasemonkey en utilisant les fonctions GM_getValue() et GM_setValue() qui fonctionnent plutôt bien.

+0

@Basilevs d'autre part, de très grandes quantités de données _will_ cause localStorage pour cracher des exceptions chez vous ;-) –

+0

@JanDvorak mon commentaire sur les quantités de données n'est plus pertinent - Greasemonkey [utilise SQLite pour stocker des valeurs] (http://stackoverflow.com/a/20976405/125562). – Basilevs