从本质上讲,我希望在DIV的内容更改时执行脚本.由于脚本是分开的(Chrome扩展&网页脚本中的内容脚本),我需要一种简单的方法来观察DOM状态的变化.我可以设置投票,但这似乎很草率.

推荐答案

很长一段时间以来,DOM3Mutations 事件是最好的可用解决方案,但出于性能原因,它们已被弃用.DOM4 Mutation Observers是不推荐使用的DOM3Mutations 事件的替代品.它们是currently implemented in modern browsers作为MutationObserver(或者在旧版本的Chrome中作为供应商前缀WebKitMutationObserver):

MutationObserver = window.MutationObserver || window.WebKitMutationObserver;

var observer = new MutationObserver(function(mutations, observer) {
    // fired when a mutation occurs
    console.log(mutations, observer);
    // ...
});

// define what element should be observed by the observer
// and what types of mutations trigger the callback
observer.observe(document, {
  subtree: true,
  attributes: true
  //...
});

此示例侦听document及其整个子树上的DOM更改,它将触发对元素属性的更改以及 struct 更改.该规范草案包含有效的mutation listener properties项内容的完整列表:

childList

  • 如果要观察到目标 children 的Mutations ,设置为true.

attributes

  • 如果要观察到目标属性的Mutations ,则设置为true.

characterData

  • 如果要观察到目标数据的Mutations ,则设置为true.

subtree

  • 如果不仅要观察到目标基因的Mutations ,而且要观察到目标基因的后代,则设置为true.

attributeOldValue

  • 如果attributes设置为true,并且需要记录Mutations 之前的目标属性值,则设置为true.

characterDataOldValue

  • 如果characterData设置为TRUE,并且需要记录Mutations 之前的目标数据,则设置为true.

attributeFilter

  • 如果不需要观察所有属性Mutations ,则设置为属性本地名称列表(不带命名空间).

(此列表自2014年4月起生效;您可以查看规范中的任何更改.)

Javascript相关问答推荐

从连接字符串创建客户端时,NodeJS连接到CosmosDB失败

如何提取Cypress中文本

如何使用侧边滚动按钮具体滚动每4个格?

如何从JSON数组添加Google Maps标记—或者如何为数组添加参数到标记构造器

React 17与React 18中的不同setState行为

react—router v6:路由没有路径

如何修复我的js构建表每当我添加一个额外的列作为它的第一列?

在react js中使用react—router—dom中的Link组件,分配的右侧不能被 destruct ''

使用Java脚本根据按下的按钮更改S文本

你怎么看啦啦队的回应?

如何从Intl.DateTimeFormat中仅获取时区名称?

并不是所有的iframe都被更换

可更改语言的搜索栏

如何从HTML对话框中检索单选项组的值?

IF语句的计算结果与实际情况相反

如何在JAVASCRIPT中合并两组对象并返回一些键

无法避免UV:flat的插值:非法使用保留字"

用于部分字符串的JavaScript数组搜索

如何正确地在ComponentWillUnmount中卸载状态以避免内存泄漏?

如何使用useparams从react路由中提取id