2010-10-31 9 views
7

he estado leyendo mucho y han estado tratando de hacer esto durante aproximadamente 5 horas ahora ... así que aquí está, anulando funciones del sitio web de Greasemonkey

Quiero escribir un script que va a reemplazar una función dummy() {$ .ajax (...)}; en un sitio web.

Así es como yo estoy tratando de hacerlo

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

function differantFunction(){ 
... 
} 

pero la función ficticia que se habría llamado a hacer algo en la página original ... ahora simplemente no hace nada.

// actualizar

Intenté funcionar esa función que estoy tratando de anular Trough la barra de Dirección para ver lo que está mal: (javascript: ficticia ("..");)

y consigo un error que me dice $ no está definido pero tengo jquery en el sitio web y en el usuario ... estoy tan perdido ahora

+1

¿No debería ser 'unsafeWindow .dummy = function (data) {...} '? –

+0

sí, debería ser solo un error ortográfico. Lo editaré ahora – Mars

Respuesta

11

Esto ocurre porque el script se está ejecutando en el alcance de GM.
Si no se utiliza ninguna función GM (como GM_setValue o GM_xmlhttpRequest), le recomiendo que hacer lo siguiente:

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

// YOUR CODE GOES HERE 

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

escribir el código como una escritura normal, no un script de GM.
Es decir, eliminar todas las referencias unsafeWindow y cosas relacionadas.
Esto hará que la secuencia de comandos se ejecute en el ámbito correcto.

pero si utiliza las funciones de GM, entonces usted tendrá que añadir unsafeWindow antes de cada variable en ámbito normal (como $) o hacer algo como lo siguiente y rezar para que funcione:

$ = unsafeWindow.$; 
//... 

PS .:Multiline string with E4X ya no es compatible. Algunas otras opciones son:
1) añadir el código en una función y luego usar Function.prototype.toString
2) Crear su código en un archivo separado y luego add it as a resource
3) add a backslash at the end of each line

+1

gracias por la información que esto hizo por mí :) – Mars

+0

Encontré un error en la consola Firebug, no se puede establecer un punto de interrupción en un método anulado con Greasemonkey:/ – baptx

+0

Parece que no puedo hacer que esto funcione, ¿podría ser porque estoy tratando de anular un controlador de eventos? –

Cuestiones relacionadas