我正在构建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"
}
]
}