JS - Как мне запустить скрипт снова, когда новые текстовые элементы добавляются на страницу - PullRequest
0 голосов
/ 03 мая 2018

После просмотра 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 голосов
/ 03 мая 2018

Одна идея может состоять в том, чтобы обезопасить исправление функции append конструктора Element (Element.prototype.append) и функции appendChild конструктора Node (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);

                           };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...