我有一个简单的扩展,它与页面的DOM一起工作(它寻找“东西”,看起来像登录表单)。问题在于,许多页面都有“动态”登录表单 - 它的代码在需要时被封装。这就是为什么body的onload事件不够。setTimeout持续发射
所以我创建突变观察者和执行我的程序每次DOM变化(会有在未来的一些限制 - 许多这些变化不会影响我的目的)
因为有些间隔我要的执行我的程序在更新DOM的延迟执行(时间500仅用于测试目的)
var target = document.body;
var timer;
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
var count = mutation.addedNodes.length;
if(count > 0) {
timer = setTimeout(function(){
console.log("executed");
my_procedure();
}, 500);
}
});
});
var config = { attributes: true, childList: true, characterData: true };
observer.observe(target, config);
的问题是,setTimeout的不断发射到无穷大,这使得网页一段时间后很懒惰。在Chrome JS控制台中,“执行”消息的数量仍在增加。
我知道clearTimeout(timer)
,但我无法正确使用它 - 所以my_procedure
只对每个DOM更改执行一次。
编辑:my_procedure
实际上是第三方库函数,所以我不想(或可以)改变它 - 该函数启动整个表单分类逻辑。
谢谢你的建议。
'my_procedure()'做了什么? – putvande
forEach()将循环你的动作..所以setTimeout触发多次 – PraJen
'my_procedure'实际上并不是我的 - 我想演示,它的代码工作,我只需要处理它的调用。对帖子做了编辑注释。 – dakov