2010-06-09 5 views
1

Lorsque je lance cette alerte de code 2 montre 6 différents liens href. alerte 3 montre le dernier href 6 fois. Comment puis-je faire utiliser le même objet (linkdom aka thelink) en alerte 2.Comment réparer cette portée JS dans GM_xmlhttpRequest

NOTE: Ceci est un script Greasemonkey

{ 
     var linkdom = thelink; 
     alert('2' + linkdom.getAttribute("href")); 
     GM_xmlhttpRequest({ 
      method: 'GET', 
      url: href, 
      onload: function(resp){ 
       //... 
       alert('3' + linkdom.getAttribute("href")); 
      } 
     }); 
    //... 
    } 

Répondre

1

Si tel était votre fonction, je dirais que passer en paramètre. Ou si JavaScript avait des paramètres par défaut, je dirais le passer en paramètre par défaut. La façon dont il est maintenant, cependant ... essayez ceci.

{ 
    var linkdom = thelink; 
    alert('2' + linkdom.getAttribute("href"));   
    GM_xmlhttpRequest({ 
     method: 'GET', 
     url: href, 
     onload: (function() { 
       var localvar = linkdom; 
       return function(resp){ 
       //... 
       alert('3' + localvar.getAttribute("href")); 
       }})() 
    }); 
//... 
} 

Cela crée une fonction externe et définit une variable locale à la valeur actuelle de linkdom. Il crée ensuite votre fonction et la renvoie. J'applique immédiatement la fonction externe pour récupérer votre fonction. Les fonctions externes ne partageront pas la même variable locale, donc le code devrait fonctionner.

+0

J'ai déjà vu ce modèle, sauf que 'linkdom' est passé à la fonction inline en tant que paramètre, plutôt que de se refermer sur la fonction inline. Y a-t-il une différence entre les deux? – lincolnk

+0

je ne suis pas sûr. Je pense que l'effet est le même - créer une variable locale avec ce que vous voulez en elle. de cette façon est un peu plus clair pour moi puisque vous pouvez voir plus clairement ce qui se passe dans 'localvar' – Claudiu

Questions connexes