一、使用MutationObserver API
1. 编写脚本代码:在插件的`content.js`文件中,添加以下代码:
javascript
const targetNode = document.body;
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.type === 'childList' || mutation.type === 'subtreeModified') {
console.log('网页结构已更新');
}
});
});
observer.observe(targetNode, { childList: true, subtree: true });
该代码会监听页面中的所有DOM节点变化(如新增、删除元素)。
二、利用第三方库简化开发
1. 安装依赖库:在`package.json`中添加`dom-changes`库:
json
"dependencies": {
"dom-changes": "^2.0.0"
}
2. 调用库函数:在脚本中使用以下代码:
javascript
const dc = require('dom-changes');
dc.watch(document.body).on('change', () => {
console.log('检测到网页结构变化');
});
该库可自动封装复杂的DOM监听逻辑,适合快速开发。
三、设置定时扫描(备用方案)
1. 定期快照对比:在插件中每隔5秒获取当前DOM结构快照,与前次快照对比差异:
javascript
let previousSnapshot = document.body.innerHTML;
setInterval(() => {
const currentSnapshot = document.body.innerHTML;
if (currentSnapshot !== previousSnapshot) {
console.log('网页内容已变更');
previousSnapshot = currentSnapshot;
}
}, 5000);
此方法性能较低,仅适用于简单场景。
四、结合事件触发优化
1. 监听用户操作:在`document`上绑定常见事件(如点击、输入),当用户交互时启动结构检测:
javascript
document.addEventListener('click', () => {
// 执行结构变化检查逻辑
});
可减少不必要的资源消耗。
五、处理动态加载内容
1. 监控AJAX请求:通过拦截`XMLHttpRequest`或`fetch`接口,检测异步加载的数据:
javascript
const originalFetch = window.fetch;
window.fetch = function(...args) {
return originalFetch(...args).then((response) => {
console.log('新数据已加载');
return response;
});
};
此方法可提前预知页面即将发生的结构变化。