Pergunta

Estou tentando escrever um script Greasemonkey que funcione com o Gmail. Eu sei como criar JavaScript que reage ao usuário clicando no link da caixa de entrada ou no link de atualização. Meu problema é que o Gmail atualiza periodicamente a caixa de entrada com novas conversas e não tenho como capturar este evento. Existe alguma maneira de capturar eventos periódicos do Ajax em JavaScript?

Foi útil?

Solução 2

Eu tentei a excelente sugestão de Miles acima, mas infelizmente ela não funciona porque o Gmail já chamou a função original do setTimeout antes de ter a chance de alterá -lo no meu roteiro Greasemonkey.

A única coisa que posso fazer é reagir de alguma forma às mudanças que o Gmail faz quando atualiza periodicamente a caixa de entrada. Descobri que existem vários eventos relacionados à DOM que disparam quando um nó é adicionado ou removido:

http://www.w3.org/tr/dom-level-3-events/events.html#event-domnodeInsert

Como o Gmail está atualizando o DOM com meus e -mails mais recentes, posso ouvir esses eventos DOM (estou usando o DomNodeInsert) e reagir às alterações.

Não é elegante, mas funciona.

Outras dicas

Você pode tentar substituir o window.setTimeout função (e possivelmente window.setInterval) com suas próprias funções:

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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top