Chrome扩展程序dom replaceChild冻结页面

时间:2016-08-09 06:41:35

标签: javascript dom google-chrome-extension

我正在构建Chrome扩展程序以在当前页面上标记一些单词。

我已就此post提出另一个问题来实现这一目标。解决方案是有效的,但不能以某种方式为我的扩展工作。 replaceChild行使页面冻结。

为什么会这样?我怎样才能解决这个问题 ?欢迎任何变通方法。

这是我到目前为止我的content_script javascript文件content.js:

var elements = document.body.getElementsByTagName('*');

for (var i = 0; i < elements.length; i++) {
    var element = elements[i];

    for (var j = 0; j < element.childNodes.length; j++) {
        var node = element.childNodes[j],
            par = node.parentElement;

        if (node.nodeType === Node.TEXT_NODE) {
            replacer(node, par);
        }
    }
}

function replacer (node, parent) {
    var re = /Questions/;
    var str = node.nodeValue;

    if (re.exec(str) !== null) {
        var newNode = document.createElement('span');

        newNode.innerHTML = node
            .nodeValue
            .replace(/Questions/g, '<span>$&</span>');

        console.log('should replace child here !');
        parent.replaceChild(newNode, node);
    }
}

一切正常,但这一行(注释要看的行):

parent.replaceChild(newNode, node);

这是manifest.json:

{
    "manifest_version": 2,
    "name": "Search Hero",
    "description": "blablabla",
    "version": "1.0",
    "permissions": [
        "activeTab"
    ],
    "content_scripts": [
        {
            "matches": [
                "<all_urls>"
            ],
            "js": [
                "content.js"
            ],
            "run_at":    "document_end"
        }
    ]
}

0 个答案:

没有答案