2010-10-31 7 views
7

J'ai lu beaucoup et ont essayé d'obtenir ce fait pendant environ 5 heures maintenant ... si elle est iciGreasemonkey, prépondérants fonctions du site

Je veux écrire un script qui remplacera une fonction dummy() {$ .ajax (...)}; sur un site web.

voici comment je suis en train de le faire

unsafeWindow.dummy = function(data){differantFunction(); $.ajax(...);}; 

function differantFunction(){ 
... 
} 

mais la fonction fictive qui aurait été appelé à faire quelque chose sur la page originale ... maintenant ne fonctionne tout simplement rien.

// Mise à jour

J'ai essayé de courir cette fonction que je suis en train de passer outre la barre de creux adres pour voir ce qui ne va pas: (javascript: factice (« .. »);)

et je reçois une erreur me disant $ est indéfinie mais j'ai jquery sur le site et dans le script de l'utilisateur ... Je suis tellement perdu maintenant

+1

devrait-il pas être 'unsafeWindow .dummy = fonction (données) {...} '? –

+0

oui il devrait c'est juste une faute de frappe ici je vais l'éditer maintenant – Mars

Répondre

11

Cela arrive parce que le script est en cours d'exécution dans la portée de GM.
Si vous n'utilisez une fonction GM (comme GM_setValue ou GM_xmlhttpRequest), je vous conseille de faire ce qui suit:

var script = document.createElement('script'); 
script.type = "text/javascript"; 
script.innerHTML = (<><![CDATA[ 

// YOUR CODE GOES HERE 

]]></>).toString(); 
document.getElementsByTagName('head')[0].appendChild(script); 

Recopiez le code comme un script normal, pas un script GM.
Je veux dire, supprimer toutes les références unsafeWindow et les choses liées.
Cela fera que le script s'exécutera dans la bonne portée.

mais si vous utilisez des fonctions GM, alors vous devrez ajouter unsafeWindow avant chaque variable portée normale (comme $) ou faire quelque chose comme ce qui suit et prier pour le faire fonctionner:

$ = unsafeWindow.$; 
//... 

PS .:Multiline string with E4X n'est plus supporté. D'autres options sont:
1) ajoutez votre code dans une fonction et puis utilisez Function.prototype.toString
2) créer votre code dans un fichier séparé puis add it as a resource
3) add a backslash at the end of each line

+1

merci pour l'info cela l'a fait pour moi :) – Mars

+0

J'ai trouvé un bug dans la console Firebug, vous ne pouvez pas définir un point d'arrêt dans une méthode surchargée avec Greasemonkey:/ – baptx

+0

Je n'arrive pas à faire fonctionner ça du tout - est-ce parce que j'essaye de surcharger un gestionnaire d'événements? –

Questions connexes