Rozszerzenie Chrome do zastąpienia tekstu, stron internetowych i postów na Facebooku, zanim zostanie wyświetlony tekst

Pracuję nad rozszerzeniem Chrome, które zastępuje określone ciągi lub wyrażenia RegEx w tekście strony internetowej.

Działa ogólnie dobrze, ale z dwoma problemami, które chciałbym rozwiązać:

(1) Oryginalny, niezmieniony tekst strony internetowej jest wyświetlany przed wymianą tekstu.

(2) Zastępowanie tekstu nie wpływa na posty Facebooka, które są dynamicznie ładowane po przewinięciu do dołu strony.

Oto kod, dostosowany zhttps://stackoverflow.com/a/6012345#6012345 z drobnymi zmianami.

// manifest.json

{
    "manifest_version": 2,
    "name": "Replace Text",
    "version": "1.0", 

    "content_scripts": [ {
        "js": [ "jquery.min.js", "replace.js" ],
        "matches": [ "<all_urls>" ],
        "run_at": "document_end"
    } ]
}


// replace.js

jQuery.fn.textWalk = function( fn ) {
    this.contents().each( jwalk );

    function jwalk() {
        var nn = this.nodeName.toLowerCase();
        if( nn === '#text') {
            fn.call( this );
        } else if( this.nodeType === 1 && this.childNodes && this.childNodes[0] && nn !== 'script' && nn !== 'textarea' ) {
            $(this).contents().each( jwalk );
        }
    }
    return this;
};

$('body').textWalk(function() {
    this.data = this.data.replace('This Text', 'That Text');
    this.data = this.data.replace(/[Rr]eplace\s[Ss]ome\s[Tt]ext/g, 'with other text');  
});

Znalazłem częściowe odpowiedzi online, ale nie mogłem ich zmusić do prawidłowej pracy.

Na przykład jednym z proponowanych rozwiązań była zmiana"run_at": "document_end" do"run_at": "document_start". To uruchamia skrypty zawartości przed zbudowaniem DOM, więc teoretycznie powinno to zrobić, zanim cokolwiek zostanie wyświetlone. Ale w moim przypadku spowodowało to, że rozszerzenie przestało całkowicie zastępować tekst.

questionAnswers(1)

yourAnswerToTheQuestion