突变观察者 - 未检测到添加的某些节点
MutationObservers - Some nodes added are not detected
我有一个内容脚本,可以监听某些网站上的文本节点的插入。它工作得很好,除了在Facebook上。脚本未检测到插入的某些文本节点。
脚本.js
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type === "characterData") {
console.log(mutation.target);
} else {
for (var x = 0; x < mutation.addedNodes.length; x++) {
var node = mutation.addedNodes[x];
if (node.nodeType === Node.TEXT_NODE) {
console.log(node);
}
}
}
});
});
observer.observe(document, { childList: true, subtree: true, characterData: true });
如果我允许记录所有节点类型,我可以在日志中看到这些文本节点的父节点。
谢谢。
这可能与这个问题是同一个问题。如果脚本在 DOM 外部"构建"元素,然后附加根,则只有根将报告为添加的节点。 TreeWalker
可用于遍历添加节点的子树以查找文本。
for (const addedNode of mutation.addedNodes) {
if (addedNode.nodeType === Node.TEXT_NODE) {
console.log(addedNode);
} else {
// If added node is not a Text node, traverse subtree to find Text nodes
const nodes = document.createTreeWalker(addedNode, NodeFilter.SHOW_TEXT);
while (nodes.nextNode()) {
console.log(nodes.currentNode);
}
}
}
Facebook有一种即使在网站上打开调试器时也能检测的方法。我猜他们也有办法检测突变观察者。他们可能只是阻止了您的内容脚本。此外,我不会真正使用整个文档作为我的对象。只需尝试使用document.querySelector监视您想要的内容即可。
相关文章:
- 如何判断何时将dom节点添加到文档中
- 仅首先需要使用jasmine从节点添加一个文件
- 如何将节点添加到子对象
- 手动将节点添加到JavaScript InfoVis Toolkit Force Directed Graph
- 有没有一种方法可以在javascript中为文本节点添加属性
- Node.js-JSON.parse-将节点添加到结果中
- Kendo TreeView-只向没有子节点的父节点添加删除图像图标
- 将节点添加到 KendoUI 树视图无法按预期工作
- 似乎无法将节点添加到剑道UI树视图
- 使用 javascript 将节点添加到 html 页面
- 如何将节点添加到文本区域的末尾
- 扩展 JS 6.无法将节点添加到树面板
- 在d3js Force Layout中向节点添加箭头和文本
- 在javascript中将节点添加到xml文件中
- ArcGIS Javascript API:向图形节点添加类
- 在查询中自动将节点添加到href,并取消默认值
- ExtJS 4.2.1,树,向节点添加子节点
- 在jquery中为一组节点添加一个父节点
- 向节点添加事件侦听器的函数不起作用
- Dynatree jquery插件向节点添加自定义属性