0

我试图寻找答案,这是我的第一篇文章,如果我以某种方式搞砸了,请多多包涵。

基本上我的问题是这样的:我正在为使用 jQuery 的 Chrome 编写扩展。我有另一个扩展,它每 10 秒发出一次定时 $.ajax() 请求。每次定时 ajax 请求及其回调函数完成时,我都需要找到一种方法来运行我的代码。可以为我自己的脚本设置一个计时器,尽管这有点半途而废并且效果不佳。

问题可以这样说明:

//extension 1
function timedFunc() {
   setTimeout(doStuff, 10000);
};
timedFunc();

//extension 2
//code to be run every time doStuff completes

我觉得这个问题可能有一个非常基本的解决方案,但我感谢您的帮助。

4

2 回答 2

0

有(曾经)一个名为 的事件DOMSubtreeModified。但它已被弃用,因此目前只有可用的解决方法。

为什么在 DOM 级别 3 中不推荐使用 DOMSubtreeModified 事件?

我不能建议使用这个事件,因为它甚至没有在所有浏览器中实现。

但是你能做的(很容易)就是用你所有的ajax调用来触发你自己的事件!

例子:

当(任何)ajax 调用完成时触发你的事件:

$(document).ajaxComplete(function() {
   $(document).trigger('domChanged');
}

听听:

$(document).on('domChanged',function() {
   alert("i changed the DOM tree!");
});

顺便提一句:

假设您只想对完成的 ajax 调用做出反应……只需使用 .ajaxComplete() 事件:

http://api.jquery.com/ajaxComplete/

于 2012-09-15T23:50:10.520 回答
0

我真的不明白你想说什么,但我确实理解了你在标题中提出的问题,所以这是我谦虚的回答:

// a global variable for the documents content
var content=document.documentElement.innerHTML;

// return true if the document content has changed
function documentChanged(){
return content==document.documentElement.innerHTML;
}
于 2012-09-15T23:51:14.193 回答