DOM更改时的JavaScript事件侦听器

DOM更改时的JavaScript事件侦听器,javascript,firefox-addon,dom-events,Javascript,Firefox Addon,Dom Events,我正在编写一个Mozilla Firefox扩展(Javascript,无需识别是IE还是Firefox),我发现自己陷入了以下情况。在页面加载时,我添加事件侦听器,如下所示: extension.addEventListener(“DOMContentLoaded”,extension.onPageLoad,true) 这将在加载DOM后立即执行m“onPageLoad()”方法,这意味着接收到所有数据。这是可行的,但我需要找到一种方法,在DOM发生变化时添加侦听器。扩展应该读取appbrow

我正在编写一个Mozilla Firefox扩展(Javascript,无需识别是IE还是Firefox),我发现自己陷入了以下情况。在页面加载时,我添加事件侦听器,如下所示:
extension.addEventListener(“DOMContentLoaded”,extension.onPageLoad,true)

这将在加载DOM后立即执行m“onPageLoad()”方法,这意味着接收到所有数据。这是可行的,但我需要找到一种方法,在DOM发生变化时添加侦听器。扩展应该读取appbrowser窗口中的所有数据,即使是通过AJAX调用(即:twitter、facebook)进行的更新

我已经研究了DOMSubtreeModified事件,但在触发初始DOMContentLoaded事件后动态添加内容时,这似乎不起作用

有人克服过这个问题吗


我的另一种选择是继续使用
timeout()
来启动相同的函数,比如说2秒,以重新读取DOM并解析它,但我更愿意只在它实际发生变化时才这样做。

听起来像是在寻找。虽然DOMSubtreeModified在上列出,但我在MDC页面上看不到它。最好的办法是听三个MDC事件,看看它们是否能满足您的需要。

domsubtreemedited
确实有效,并且已经得到了相当好的支持(Firefox和WebKit已经支持了很多年,即仅在版本9中,Opera显然还没有)。对于
DOMContentLoaded
是否已启动没有限制,因此我建议您的测试存在缺陷。有关示例,请参见此处:


其他DOM突变事件(如
DOMNodeInserted
)得到了更好的支持(尽管IE<9中仍然没有),因此我建议尽可能使用这些事件。

对于2017年或以后发现这一点的人,这些DOM修改事件已被弃用。您需要的是
MutationObserver


请参阅MDN上的,或了解更多详细信息。

DOMSubtreeModified一直在为me@Jage:可用于通过Ajax动态插入的元素?如果我使用带有简单控制台日志记录的DOMSubtreeModified,除了初始页面解析之外,我不会得到其他结果。什么浏览器?我专门用它来检测来自ajax的更改。公平地说,我只在FF和chrome上进行了测试。似乎我的事件处理程序确实有问题,因为它现在可以在Facebook上动态加载内容,但出于某些疯狂的原因,它在Twitter上没有给出任何结果。我在页面加载中发现了十几个HTML元素(只是它们的主体),当AJAX调用重新加载主体,但没有添加任何事件时,我会看到不同的DOMSubtreeModified触发。我是否正确地假设在我的事件处理程序中,我仍然可以使用'aEvent.originalTarget'获取当前文档函数(aEvent))?(我知道这是一个老问题)顺便说一句,您还应该限制它。