2009-03-04 2 views
5

Я пытаюсь написать сценарий Greasemonkey, который работает с Gmail. Я знаю, как создать javascript, который реагирует на пользователя, нажимающего ссылку «Входящие» или ссылку «Обновить». Моя проблема заключается в том, что Gmail периодически обновляет почтовые ящики с помощью новых разговоров, и у меня нет способа захватить это событие. Есть ли способ захватить периодические события Ajax в javascript?Как захватить событие Ajax, которое периодически обновляет почтовый ящик gmail

ответ

1

Я попробовал отличное предложение Майлза выше, но, к сожалению, это не работает, потому что Gmail уже называется оригинал setTimeout, прежде чем у меня появится возможность изменить его в моем сценарии Greasemonkey.

Единственное, что я могу сделать, это как-то отреагировать на изменения, которые Gmail делает, когда он периодически обновляет почтовый ящик. Я обнаружил, что есть несколько связанных с DOM событий, что огнь, когда узел добавляется или удаляется:

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

Поскольку Gmail обновляет DOM с моими последними письмами, я могу слушать эти события DOM (я используя DOMNodeInserted) и реагировать на изменения.

Это не элегантный, но он работает.

1

Вы могли бы попытаться заменить window.setTimeout функцию (и, возможно, window.setInterval) с собственными функциями:

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

Это отличная идея. К сожалению, пока это не работает. Я попытался заменить оба window.setTimeout и window.setInterval, и я не получаю никаких предупреждений. Интересно, что Gmail уже вызвал эти функции, прежде чем я их заменил в сценарии Greasemonkey. –

+0

Я даже тестировал, что замена функций setTimeout и setInterval работает, вызывая их в сценарии Greasmonkey. Как и ожидалось, я вижу предупреждения. Моя проблема заключается в том, что Gmail уже вызвал setTimeout или setInterval до запуска сценария Greasemonkey. –

Смежные вопросы