2012-03-07 2 views
2

Je souhaite "relier" tout le contenu d'une page spécifique via un XMLHTTPRequest à un domaine de réseau local. Cela me conduire à GM_xmlhttpRequest dans Greasemonkey/NinjaKit sauf que je veux exécuter lorsque clique sur le lien, pas quand le userscript court en fait ...Utilisation des fonctions GM_utilisateur dans le contexte de la page

J'ai donc quelque chose comme:

links = document.getElementsByTagName('a'); 
for (i = 0; i < links.length; i++) { 
    oldhref = links[i].getAttribute('href'); 
    links[i].setAttribute('href', 'javascript:loadLink(' + oldhref + ')'); 
} 

Je comprends que je peux soit utiliser unsafeWindow ou ajouter un script élément à document pour injecter loadLink fonction.
Mais comment puis-je utiliser GM_xmlhttpRequest dans loadLink?

Je l'ai regardé 0.7.20080121.0 Compatibility la page mais je ne suis pas sûr que ce soit pour ce que je dois ...

J'ai envisagé d'ajouter un aussi iframe à la page et les liens modifiés chargeraient à l'intérieur du iframe (déclenchement de la userscript à nouveau), mais je préfère une solution plus propre ...

Répondre

1

Vous devez presque jamais utiliser des fonctions à l'intérieur de GM le contexte de la page, et à partir du code affiché jusqu'à présent, vous n'avez pas besoin de unsafeWindow dans ce cas non plus.

De même, il n'est pas nécessaire de réécrire le href pour ce qui est posté jusqu'ici.

Quelque chose comme ça accomplir ce que vous voulez:

var links = document.getElementsByTagName ('a'); 

for (var J = 0, len = links.length; J < len; ++J) { 
    links[J].addEventListener ("click", myLoadLink, false); 
} 

function myLoadLink (zEvent) { 
    zEvent.preventDefault(); 
    zEvent.stopPropagation(); 

    var targetHref = zEvent.currentTarget.getAttribute ('href'); 

    GM_xmlhttpRequest ({ 
     //wtv 
    }); 

    return false; 
} 


Ou avec jQuery:

$("a").click (myLoadLink); 

function myLoadLink() { 

    var targetHref = $(this).attr ('href'); 

    GM_xmlhttpRequest ({ 
     //wtv 
    }); 

    return false; 
} 
+0

fonctionne très bien! Merci! –

+0

De rien; heureux de vous aider! –

1

Ok, donc je réussi à obtenir cette solution officielle Greasemonkey travail (je ne sais pas ce fait de mal la première fois) avec :

unsafeWindow.loadLink = function(href) { 
    setTimeout(function(){ 
     GM_xmlhttpRequest({ 
      //wtv 
     }); 
    },0); 
} 

Mais je préfère encore une solution sans utiliser unsafeWindow s'il y a une ... (d'autant plus que celui-ci se sent si mal ...)

Questions connexes