2010-10-31 3 views
7

Ho letto un sacco e hanno cercato di ottenere questo fatto per circa 5 ore ora ... ecco èGreasemonkey, ignorando le funzioni del sito web

Voglio scrivere uno script che ignorare una funzione dummy() {$ .ajax (...)}; su un sito web.

ecco come sto cercando di farlo

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

function differantFunction(){ 
... 
} 

ma la funzione fittizia che sarebbe stato chiamato a fare qualcosa sulla pagina originale ... ora solo non fa nulla.

// aggiorno

ho provato a fare funzionare la funzione che sto cercando di ignorare Trough la barra Indirizzo per vedere cosa c'è che non va: (javascript: fittizio ("..");)

e ottengo un errore che mi dice $ non è definito ma ho jquery sul sito web e nel userscript ... sono così perso adesso

+1

non dovrebbe essere 'unsafeWindow .dummy = function (data) {...} '? –

+0

sì, dovrebbe essere solo un errore di battitura, lo modificherò ora – Mars

risposta

11

Questo accade perché lo script è in esecuzione in ambito GM.
Se non si utilizza alcuna funzione GM (come GM_setValue o GM_xmlhttpRequest), vi consiglio di effettuare le seguenti operazioni:

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

// YOUR CODE GOES HERE 

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

scrivere il codice come uno script normale, non uno script di GM.
Voglio dire, rimuovere tutti i riferimenti unsafeWindow e materiale correlato.
In questo modo lo script verrà eseguito nell'ambito corretto.

MA se si utilizzano le funzioni di GM, allora si avrà bisogno di aggiungere unsafeWindow prima di ogni variabile di portata normale (come $) o fare qualcosa di simile alla seguente e pregare per farlo funzionare:

$ = unsafeWindow.$; 
//... 

PS .:Multiline string with E4X non è più supportato. Alcune altre opzioni sono:
1) aggiungere il codice in una funzione e quindi utilizzare Function.prototype.toString
2) creare il codice in un file separato e quindi add it as a resource
3) add a backslash at the end of each line

+1

grazie per le informazioni che ho fatto per me :) – Mars

+0

Ho trovato un errore nella console di Firebug, non è possibile impostare un punto di interruzione in un metodo sovrascritto con Greasemonkey:/ – baptx

+0

Non riesco a farlo funzionare, potrebbe essere perché sto cercando di sovrascrivere un gestore di eventi? –