如何全局跟踪 JavaScript 中的属性更改和 DOM 突变?

How to globally track property changes and DOM mutations in JavaScript?

提问人:Imperial A 提问时间:10/27/2023 最后编辑:user3840170Imperial A 更新时间:11/11/2023 访问量:31

问:

我正在做一个项目,我需要监控 DOM 中的更改,特别是跟踪影响 DOM 元素的任何和所有 JavaScript 属性更改。我的目标是侦听对属性的任何“设置”操作(包括直接赋值、方法调用等),这些操作会导致 DOM 中的修改。

这是我想要实现的目标:

  1. 全局跟踪:我想要一种机制,允许我跟踪在我的 JavaScript 代码中任何位置设置的、影响 DOM 的任何属性。这包括 DOM 元素本身的属性或最终修改 DOM 的任何其他对象。

  2. DOM 突变:除了跟踪属性变化外,我还需要观察对 DOM 结构的修改,包括元素的添加、删除、属性更改等。

根据我的理解,我不能整个 DOM 元素,我不确定如何使用来拦截属性更改。 观看 DOM 更改似乎是一个很好的解决方案。ProxyObject.defineProperty()MutationObserver

是否有推荐的方法或现有库来促进这种全局 DOM 监控?此外,考虑到跟踪所有这些更改的潜在巨大开销,我如何确保此过程具有性能效率?

提前感谢您的建议!

我首先尝试使用 Proxy 对象来拦截 JavaScript 属性更改。

javascript dom mutation-observers es6-proxy

评论

3赞 Barmar 10/27/2023
MutationObserver如果您使用这些选项,则可以执行此操作,尽管监视整个 DOM 可能会导致性能大幅下降。subtree: true, attributes: true
0赞 Imperial A 10/30/2023
感谢您的回复。我尝试过使用 和 选项。但是,在将整个 DOM 作为节点传递时,我遇到了问题。有没有一种特定的方法或解决方法可以有效地观察整个 DOM?我可以传递但不能传递其他 Windows 元素,因为它们不是节点(但它们包含我感兴趣的属性)。MutationObserversubtree: trueattributes: truewindow.document
0赞 Barmar 10/30/2023
在调试时,是否真的需要以编程方式执行此操作,而不是在 DevTools 中执行此操作?

答: 暂无答案