MutationObserver详解

1.基于之前Chrome游览器插件开发的过程中,会遇到在插件控制台打印被安游览器页面的元素,一直未解决。后来找到了解决了办法可以使用MutationObserver;使用MutationObserver这个可以在被安游览器页面直接打印页面元素等等,可能你会说本来不就可以获取吗。我这个是因为页面接口返回的是html页面 并非原生元素 所以需要如此操作;会在最后附上插件具体代码。

2.以下是关于MutationObserver用法

MutationObserver 用来监视Dom变动。DOM的任何变动,比如节点的增减、属性的变动、文本内容的变动都会触MutationObserver事件。

但是,它与事件有一个本质不同:事件是同步触发,也就是说,DOM的变动立刻会触发相应的事件;MutationObserver则是异步触发,DOM的变动并不会马上触发,而是要等到当前所有DOM操作都结束才出发。

Mutation Observer 有以下特点:
    它等待所有脚本任务完成后,才会运行(即异步触发方式)。
    它把 DOM 变动记录封装成一个数组进行处理,而不是一条条个别处理 DOM 变动。
    它既可以观察 DOM 的所有类型变动,也可以指定只观察某一类变动。

MutationObserver 构造函数

var observer = new MutationObserver(function (mutationRecoards, observer) {
	// mutationRecoards变动数组
	// observer 观察者实例
});

构造函数接收一个回调函数 ,回调函数有两个参数,一个变动数组,第二个是观察者实例。

MutationObserver 的实例方法

1.observer(node,config)

1. observe(node, config)
启动监听,它接受两个参数。
第一个参数:所要观察的 DOM 节点
第二个参数:一个配置对象,指定所要观察的特定变动

配置对象如下:
childList:子节点的变动(指新增,删除或者更改)。
attributes:属性的变动。
characterData:节点内容或节点文本的变动。
subtree:布尔值,表示是否将该观察器应用于该节点的所有后代节点。
attributeOldValue:布尔值,表示观察attributes变动时,是否需要记录变动前的属性值。
characterDataOldValue:布尔值,表示观察characterData变动时,是否需要记录变动前的值。
attributeFilter:数组,表示需要观察的特定属性(比如[‘class’,‘src’])。

具体代码如下:
var config = { attributes: false, childList: true, subtree: true ,characterData: true };
var observer = new MutationObserver(callback);
  // 开始观察目标节点
  // 接收俩个参数  一个是变动数组 一个是观察者实例
observer.observe(jbsxBox, config);

对一个节点添加观察器,就像使用addEventListener方法一样,多次添加同一个观察器是无效的,回调函数依然只会触发一次。但是,如果指定不同的options对象,就会被当作两个不同的观察器。

2.disconnect()

disconnect方法用来停止观察。调用该方法后,DOM 再发生变动,也不会触发观察器。

3.takeRecords()

用来清除变动记录,即不再处理未处理的变动。该方法返回变动记录的数组。

关于Mutation Observer用法如下:

参考Mutation Observer API -- JavaScript 标准参考教程(alpha) (ruanyifeng.com)

最后插件具体用法 content.js

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值