Как перехватить событие Ajax, которое периодически обновляет почтовый ящик gmail - PullRequest
5 голосов
/ 05 марта 2009

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

Ответы [ 2 ]

1 голос
/ 06 марта 2009

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

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

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

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

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

1 голос
/ 05 марта 2009

Вы можете попробовать заменить функцию 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);
}
...