2012-06-25 2 views
26

Sono totalmente nuovo a Greasemonkey, javascript, infatti tutta la roba dell'interfaccia utente.Esegui script Greasemonkey sulla stessa pagina, più volte?

Presupposto: userscript è gestito da GS una volta dopo il caricamento della pagina. Tuttavia, ho bisogno lo stesso script da eseguire più volte senza aggiornamento

Caso d'uso: Per ex, Amazon.com ricerca avviene tramite Ajax. Ho bisogno di incorporare un elemento personalizzato nei risultati di ricerca.

ho bisogno di iniettare il contenuto alla ricerca-risultati-div insieme ai risultati ogni volta che una ricerca avviene nella stessa pagina (non c'è refresh della pagina)

mio script corrente viene eseguito solo con il refresh della pagina.

spero sopra spiegazione è chiara. Per favore aiuto.

risposta

37

Il modo più semplice e più efficace è utilizzare the waitForKeyElements() utility.

Ecco un completo di script che utilizza jQuery e waitForKeyElements per alterare i risultati di ricerca Amazon:

// ==UserScript== 
// @name  _Amazon Search, alter results 
// @include http://www.amazon.com/s/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js 
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js 
// @grant GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a design change 
    introduced in GM 1.0. It restores the sandbox. 
*/ 

function addCustomSearchResult (jNode) { 
    //***** YOUR CODE HERE ***** 
    jNode.prepend (
     '<div id="result_000" class="fstRow">Buy my stuff, instead!</div>' 
    ); 
} 

waitForKeyElements ("#atfResults", addCustomSearchResult); 
+2

Grazie MOLTO !!!!! Sebbene io abbia qualche esperienza di programmazione, questo scripting dell'interfaccia utente è un po 'fastidioso (fastidioso) per me. Il tuo codice funziona esattamente come volevo. Lo personalizzerei per soddisfare ulteriori requisiti. Grazie mille ancora. – Firefox

+0

Prego; felice di aiutare! –

4

È possibile utilizzare l'evento DOMNodeInserted per chiamare la callback, ad esempio:

document.addEventListener('DOMNodeInserted', function() { alert('hi') }, false); 

Si noti che l'evento sarà attivato da ogni modifica della struttura della pagina, in modo da dovrete controllare che sei mirando al giusto cambiamento.

+0

Grazie mille, io check it out. È possibile tenere traccia dell'evento "click" relativo al pulsante di ricerca? – Firefox

+1

Gli eventi di mutazione sono deprecati, buggati e non facili da usare nella pratica. ... È possibile tenere traccia dell'evento click, ma le modifiche effettive della pagina avverranno dopo un intervallo casuale (fino a molti secondi). –

+0

Non sapevo che fosse deprecato, grazie. – ncreep