监控页面更改

时间:2014-01-21 19:11:24

标签: jquery javascript-events google-chrome-extension content-script

我正在为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,这可能是这种扩展的结果,所以我希望尽可能减少影响。

1 个答案:

答案 0 :(得分:1)

DOMSubtreeModified是过时的 Mutation Events API 的一部分,由于臭名昭着的低效率而被弃用(以及其他原因)。根据MDN,DOM Mutation Events“已从网络中移除”的功能,“正在被删除”“使用它的Web应用程序可能随时中断“

您应该使用新的 MutationObserver API ,这也更有效 ( mutation-summary 库现在为这个新API提供了一个有用的接口。)

另请参阅 this answer 以获取更多详细信息, this answer 查看类似的用例:使用MutationObserver API检测的Chrome扩展程序(和装饰)异步加载谷歌搜索结果。