2009-03-04 7 views
5

Sto provando a scrivere uno script Greasemonkey che funzioni con Gmail. So come creare javascript che reagisce all'utente facendo clic sul collegamento Posta in arrivo o sul collegamento Aggiorna. Il mio problema è che Gmail aggiorna periodicamente la Posta in arrivo con nuove conversazioni e non ho modo di catturare questo evento. C'è un modo per catturare gli eventi Ajax periodici in javascript?Come acquisire l'evento Ajax che aggiorna periodicamente la posta in arrivo di Gmail

risposta

1

ho cercato Miles' ottimo suggerimento di cui sopra, ma purtroppo non funziona perché Gmail ha già chiesto l'originale funzione setTimeout prima che io abbia la possibilità di cambiarlo nel mio script Greasemonkey.

L'unica cosa che posso fare è in qualche modo reagire ai cambiamenti che Gmail fa quando aggiorna periodicamente la casella di posta. Ho scoperto che ci sono diversi eventi correlati DOM che il fuoco quando viene aggiunto o rimosso un nodo:

http://www.w3.org/TR/DOM-Level-3-Events/events.html#event-DOMNodeInserted

Poiché Gmail sta aggiornando il DOM con le mie ultime email, posso ascoltare per questi eventi DOM (sono usando DOMNodeInserted) e reagire alle modifiche.

Non è elegante, ma funziona.

1

Si potrebbe provare a sostituire la funzione window.setTimeout (e possibilmente window.setInterval) con le proprie funzioni:

window._setTimeout = window.setTimeout; 
window.setTimeout = function(func, delay) { 
    return window._setTimeout(function() { 
     // Your code goes here, before the client function is called 
     alert('A timeout event just fired!'); 

     if (typeof func == 'string') { 
      eval(func); 
     } else { 
      func(); 
     } 
    }, delay); 
} 
+0

Questa è una grande idea. Sfortunatamente, non ha funzionato per me finora. Ho provato a sostituire sia window.setTimeout che window.setInterval e non ricevo alcun avviso. Mi chiedo se Gmail abbia già chiamato queste funzioni prima di sostituirle nello script Greasemonkey. –

+0

Ho anche provato che la sostituzione delle funzioni setTimeout e setInterval li chiama nello script Greasmonkey. Come previsto, vedo gli avvisi. Il mio problema sembra essere che Gmail ha già chiamato setTimeout o setInterval prima dell'esecuzione dello script Greasemonkey. –

Problemi correlati