JS - 如何在将新文本元素添加到页面

时间:2018-05-03 09:45:29

标签: javascript google-chrome-extension

浏览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,但我们无法弄清楚如何。有什么建议吗?

1 个答案:

答案 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);

                           };