如何捕获定期刷新gmail收件箱的Ajax事件

时间:2009-03-04 21:42:19

标签: javascript gmail greasemonkey

我正在尝试编写一个适用于Gmail的Greasemonkey脚本。我知道如何创建响应用户点击收件箱链接或刷新链接的javascript。我的问题是Gmail会定期刷新收件箱中的新会话,我无法捕获此事件。有没有办法在javascript中捕获周期性的Ajax事件?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

我上面尝试了Miles的优秀建议,但遗憾的是它不起作用,因为Gmail在我有机会在我的Greasemonkey脚本中更改它之前已经调用了原始的setTimeout函数。

我唯一能做的就是以某种方式对Gmail在定期刷新收件箱时所做的更改做出反应。我发现添加或删除节点时会触发几个与DOM相关的事件:

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

由于Gmail使用我的最新电子邮件更新DOM,因此我可以侦听这些DOM事件(我正在使用DOMNodeInserted)并对更改做出反应。

它不优雅,但它有效。