2009-03-04 6 views
5

J'essaye d'écrire un script Greasemonkey qui fonctionne avec Gmail. Je sais comment créer un javascript qui réagit à l'utilisateur en cliquant sur le lien Boîte de réception ou sur le lien Actualiser. Mon problème est que Gmail actualise périodiquement la boîte de réception avec de nouvelles conversations et je n'ai aucun moyen de capturer cet événement. Est-il possible de capturer des événements Ajax périodiques en JavaScript?Comment capturer l'événement Ajax qui réactualise périodiquement la boîte de réception Gmail

Répondre

1

J'ai essayé une excellente suggestion de Miles ci-dessus, mais malheureusement, il ne fonctionne pas parce que Gmail a déjà appelé l'original Fonction setTimeout avant de pouvoir la modifier dans mon script Greasemonkey. La seule chose que je peux faire est de réagir d'une façon ou d'une autre aux changements que Gmail fait quand il actualise périodiquement la boîte de réception. Je trouve qu'il ya plusieurs événements liés DOM que le feu lorsqu'un noeud est ajouté ou supprimé:

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

Depuis Gmail est mise à jour le DOM avec mes derniers courriels, je peux écouter ces événements DOM (je suis en utilisant DOMNodeInserted) et réagissez aux changements.

Ce n'est pas élégant, mais ça marche.

1

Vous pouvez essayer de remplacer la fonction window.setTimeout (et peut-être 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); 
} 
+0

C'est une bonne idée. Malheureusement, ça ne marche pas pour moi jusqu'à présent. J'ai essayé de remplacer à la fois window.setTimeout et window.setInterval et je ne reçois aucune alerte. Je me demande si Gmail a déjà appelé ces fonctions avant de les remplacer dans le script Greasemonkey. –

+0

J'ai même testé que le remplacement des fonctions setTimeout et setInterval fonctionne en les appelant dans le script Greasmonkey. Comme prévu, je vois des alertes. Mon problème semble être que Gmail a déjà appelé setTimeout ou setInterval avant l'exécution du script Greasemonkey. –

Questions connexes