我正在尝试编写一个适用于Gmail的Greasemonkey脚本。我知道如何创建响应用户点击收件箱链接或刷新链接的javascript。我的问题是Gmail会定期刷新收件箱中的新会话,我无法捕获此事件。有没有办法在javascript中捕获周期性的Ajax事件?
答案 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)并对更改做出反应。
它不优雅,但它有效。