J'essaie d'écrire un script Greasemonkey qui fonctionne avec Gmail. Je sais comment créer un javascript qui réagit au fait que l'utilisateur clique sur le lien Inbox ou sur le lien Refresh. Mon problème est que Gmail rafraîchit périodiquement la boîte de réception avec de nouvelles conversations et je n'ai aucun moyen de capturer cet événement. Existe-t-il un moyen de capturer des événements Ajax périodiques en javascript ?
Réponses
Trop de publicités?Vous pouvez essayer de remplacer le window.setTimeout
(et éventuellement window.setInterval
) avec vos propres fonctions :
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);
}
J'ai essayé l'excellente suggestion de Miles ci-dessus, mais malheureusement cela ne fonctionne pas car Gmail a déjà appelé la fonction setTimeout originale avant que j'aie la possibilité de la modifier dans mon script de Greasemonkey.
La seule chose que je puisse faire est de réagir d'une manière ou d'une autre aux modifications apportées par Gmail lorsqu'il rafraîchit périodiquement la boîte de réception. J'ai découvert qu'il existe plusieurs événements liés au DOM qui se déclenchent lorsqu'un nœud est ajouté ou supprimé :
http://www.w3.org/TR/DOM-Level-3-Events/events.html#event-DOMNodeInserted
Puisque Gmail met à jour le DOM avec mes derniers e-mails, je peux écouter ces événements DOM (j'utilise DOMNodeInserted) et réagir aux changements.
Ce n'est pas élégant, mais ça marche.