我有一个内容脚本,用于侦听某些网站上文本节点的插入。它在Facebook上工作得很好。插入的一些文本节点未被脚本检测到。
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 });
如果我允许记录所有节点类型,我可以在日志中看到这些文本节点的父节点。
感谢。
答案 0 :(得分:1)
这可能与 this question 的问题相同。如果脚本在 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);
}
}
}
答案 1 :(得分:0)