Javascript不替换';我不在Google.com工作

Javascript不替换';我不在Google.com工作,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我有一个扩展,可以替换页面上的文本。它在除谷歌外的所有网站上都非常有效。在初始页面加载时,它不起作用。当我刷新页面时,它有时工作,有时不工作。如果我从谷歌点击一个链接,然后返回,它会加载良好。它在其他每一页上都能正常工作(至少在我测试过的每一页上) 有人知道为什么下面的代码会导致这个问题,并且知道如何修复它吗?这是取自我的background.js。我必须确保替换的是文本,而不是文本html标记 $.fn.replaceText = function (search, replace, text

我有一个扩展,可以替换页面上的文本。它在除谷歌外的所有网站上都非常有效。在初始页面加载时,它不起作用。当我刷新页面时,它有时工作,有时不工作。如果我从谷歌点击一个链接,然后返回,它会加载良好。它在其他每一页上都能正常工作(至少在我测试过的每一页上)

有人知道为什么下面的代码会导致这个问题,并且知道如何修复它吗?这是取自我的background.js。我必须确保替换的是文本,而不是文本html标记

$.fn.replaceText = function (search, replace, text_only) {
    return this.each(function () {
        var node = this.firstChild,
            val,
            new_val,
            remove = [];
        if (node) {
            do {
                if (node.nodeType === 3) {
                    val = node.nodeValue;
                    new_val = val.replace(search, replace);
                    if (new_val !== val) {
                        if (!text_only && /</.test(new_val)) {
                            $(node).before(new_val);
                            remove.push(node);
                        } else {
                            node.nodeValue = new_val;
                        }
                    }
                }
            } while (node = node.nextSibling);
        }
        remove.length && $(remove).remove();
    });
};

chrome.storage.local.get(function (cfg) {
    //get replacedWord array
    if (typeof (cfg["replacedWord"]) !== 'undefined' && cfg["replacedWord"] instanceof Array) {
        var myWords = cfg["replacedWord"];
        var newWords = cfg["newWords"];

        for (var j = 0; j < myWords.length; ++j) {
            var thisWord = new RegExp(myWords[j], "i");
            $("body *").replaceText(thisWord, '<abbr title="Test Hover"><font color="red">' + newWords[j] + '</font></abbr>');
        } //end for loop
    }
});
$.fn.replaceText=函数(仅搜索、替换、文本){
返回此。每个(函数(){
var node=this.firstChild,
瓦尔,
纽约,
删除=[];
如果(节点){
做{
if(node.nodeType==3){
val=node.nodeValue;
new_val=val.replace(搜索,替换);
如果(新值!==值){

如果(!text_only&&/我猜这可能是因为您的脚本在页面加载后立即运行,google加载一个空页面,然后包含内容。您必须以某种方式监视页面内容的更改。很有趣!我正试图弄清楚为什么会这样!有没有办法从background.js将其延迟几秒钟?这是一个好主意吗?但如果您碰巧连接速度慢,这将不起作用。javascript中的间歇性问题几乎总是与异步相关的。如果它有时有效,而不是其他情况,则可能是由于事件的执行顺序。不确定如何从外部页面获取load ready语句,但如果没有其他原因延迟计时器可能会让您知道这确实是一个异步问题。将您的活动延迟5000毫秒,看看它是否有效,然后您就会得到答案。因此,我仍然对此有问题,在使用计时器和其他东西后,相信我已经发现了问题。尽管我检查了node.nodetype为3,但此脚本正在替换单词w在metatag和一些javascript函数中,这就是页面不会加载的原因。当节点类型为3时,怎么会发生这种情况??