我正在为Stack Overflow编写Chrome扩展程序,并且需要在页面更新时重新运行检查(即将评论/答案添加到内容中)。
我已经尝试订阅$(document).ajaxComplete()
,但似乎从来没有开始过。
我发现绑定到DOMSubtreeModified
允许我正确更新,但它似乎经常触发 。在页面加载时,它可以被调用21次(有时它只被调用一次)。同样,如果我在控制台中执行jquery选择,则事件会再次触发。
$(setup);
var hits = 0;
var original_title;
function setup()
{
original_title = document.title;
doWork();
}
function doWork()
{
//unbind so our own changes don't cause infinite loops of the event.
$("#mainbar").unbind("DOMSubtreeModified", findSkeets);
//Debug: Add the Number of function hits to the title bar
hits++;
document.title = "(" + hits + ") " + original_title;
//Do Work Here
//Rebind to the event now that we've finished executing;
$("#mainbar").bind("DOMSubtreeModified", findSkeets);
}
是否有更有效的方法来监控页面的更改?我已经看到有几个Chrome挂起了SO,这可能是这种扩展的结果,所以我希望尽可能减少影响。
答案 0 :(得分:1)
DOMSubtreeModified
是过时的 Mutation Events API 的一部分,由于臭名昭着的低效率而被弃用(以及其他原因)。根据MDN,DOM Mutation Events
是“已从网络中移除”的功能,“正在被删除”和“使用它的Web应用程序可能随时中断“。
您应该使用新的 MutationObserver API ,这也更有效 ( mutation-summary 库现在为这个新API提供了一个有用的接口。)
另请参阅 this answer 以获取更多详细信息, this answer 查看类似的用例:使用MutationObserver API检测的Chrome扩展程序(和装饰)异步加载谷歌搜索结果。