浏览StackOverflow一段时间后,我无法找到解决方案。对于学校项目,我们已经制作了chrome / firefox扩展,使用我们自定义的过滤器替换网站上的文字。我们已经能够对URL更改做出反应,但是当网站更新时我们无法更新它而不更改URL,例如当您在Facebook或youtube上向下滚动并自动添加新内容时。
我们已经尝试过使用mutationObserver但是它没有被证明是成功的(没有错误但也没有控制台日志,所以它没有被触发)
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);
walk(document.body)
}
}
}
});
});
observer.observe(document, { childList: true, subtree: true, characterData: true });
基本上我们只想在站点更改后再次运行我们的扩展而不更新URL,但我们无法弄清楚如何。有什么建议吗?
答案 0 :(得分:1)
一个想法可能是修补append
构造函数的Element
函数(Element.prototype.append
)和Node构造函数的appendChild
函数(Node.prototype.appendChild
)。不太好,但应该做的工作。
Element.prototype.__append__ = Element.prototype.append;
Element.prototype.append = function(e){
console.log("Replacing some words in this element");
this.__append__(e);
};
Node.prototype.__appendChild__ = Node.prototype.appendChild;
Node.prototype.appendChild = function(e){
console.log("Replacing some words in this node");
this.__appendChild__(e);
};