2013-03-07 3 views
5

visito un sito web con un file javascript nella testa del HTMLrimuovere una funzione javascript con Greasemonkey

<script language="javascript" src="javscript.js"></script> 

Il codice all'interno di questo file è:

// keypress management 
if (document.layers) document.captureEvents(Event.KEYPRESS) 
function update(e) {   
    if (document.all) {    // Explorer 
     if (event.keyCode==13) document.forms[0].submit(); // 13 = ENTER 
     else if (event.keyCode==26) runHelp(hplk);   // 26 = CTRL+Z 
     return; 
    } else {            // mozilla 
     if (e.which==13) document.forms[0].submit();  // 13 = ENTER 
     else if (e.which==26) runHelp(hplk);    // 122 = CTRL+Z  
     return;   
    } 
} 
document.onkeypress=update; 

Voglio disattivare/rimuovere/sostituisci questa funzione con Greasemonkey.

ho provato con

unsafeWindow.update = function(){} 

senza alcun risultato! (non ci sono errori nella console)

c'è un modo per uccidere questa funzione?

+0

vedere se la risposta a [questa domanda] (http://stackoverflow.com/questions/4064035/greasemonkey-overriding-website-functions) funziona per voi. Non ho usato GreaseMonkey da un po ', ma sembra avere senso. –

+1

Si tratta di Firefox 2, con Greasemonkey precedente, come le precedenti domande? –

+0

ho provato il codice e ho aggiunto un avviso ('TEST'); il codice verrebbe creato nella testa ma non sparava "test" – bernte

risposta

8

Non è chiaro che update sia una funzione globale. Se non lo è, allora quell'approccio non funzionerà.

Ma si può ignorare il gestore di pressione del tasto con:

unsafeWindow.document.onkeypress = function(){}; 



Per un modo ad alta potenza generale per bloccare in modo selettivo, o sostituire, qualsiasi JS (su Firefox), utilizzare @run-at document-start e the checkForBadJavascripts function, in questo modo:

// ==UserScript== 
// @name  _Replace select javascript on a page 
// @include  http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require  https://gist.github.com/raw/2620135/checkForBadJavascripts.js 
// @run-at  document-start 
// @grant  GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a design change 
    introduced in GM 1.0. It restores the sandbox. 
*/ 

checkForBadJavascripts ([ 
    [ false, 
     /document\.onkeypress\s*=\s*update/, 
     function() { 
      addJS_Node (myKeypressFunction.toString()); 
      addJS_Node ('document.onkeypress = myKeypressFunction;'); 
     } 
    ] 
]); 


function myKeypressFunction (evt) { 
    /* DO WHATEVER HERE BUT USE NO GREASEMONKEY FUNCTIONS INSIDE 
     THIS FUNCTION. 
    */ 
    console.log ("Keypress function fired."); 
} 

See this answer, for more information on checkForBadJavascripts.

+0

TI AMO BROCK ADAMS: D unsafeWindow.document.onkeypress = function() {}; funziona perfettamente: D ha incluso questa parte nella vecchia sceneggiatura e funziona perfettamente! Spero che questa parte sia finita definitivamente: D testerò la prossima settimana sul terminale e ti farò sapere. di quanto possiamo finire questa parte e bere una birra .. o due: D GRAZIE – bernte

+0

non posso usare checkForBadJavascripts perché il terminale non ha una connessione internet! – bernte

+1

Prego! Ricorda, le domande Stack Overflow non riguardano una "parte" di qualunque progetto tu stia lavorando. Si tratta di un singolo problema di programmazione specifico. –