更新:在“我不是”的指导下,我解决了这个问题;最后的工作代码。
我目前正在开发我的第一个 Chrome 扩展程序,旨在对查看的网页执行文本替换。我一直在努力尝试了解 DOM 操作,最终我想出了以下内容。理论上这应该遍历整个 DOM 表,找到文本节点,克隆它们,替换文本(如果适用),并用克隆替换原始节点。
这是我的 manifest.json ......
{
"name": "My app",
"version": "1.0",
"manifest_version": 2,
"description": "Do thing.",
"permissions": [
"tabs", "http://*/"
],
"content_scripts": [
{
"matches": ["http://*/*"],
"js": ["myapp.js"],
"run_at": "document_end"
}
]
}
还有 myapp.js;
function myapp() {
var nodes = document.getElementsByTagName("*");
for(var i = 0; i < nodes.length; i++) {
if(nodes[i].type == "text") {
var parent = nodes[i].parentnode;
var newnode = nodes[i].cloneNode(true);
newnode.data.replace("test text","replacement test text");
parent.replaceChild(newnode, nodes[i]);
};
};
};
myapp();
我已经导入并激活了扩展。Chrome 的 javascript 控制台之前已显示错误,这意味着它正在运行,但现在没有,这意味着没有基本的拼写错误。我假设我对如何更改或交换文本节点有误,或者对如何设置清单文件或 js 文件有基本的误解,但我试图找出哪个我碰壁了。
任何帮助将不胜感激!
更新:这是工作版本。
function myapp() {
var nodes = document.getElementsByTagName("*");
for(var i = 0; i < nodes.length; i++) {
var subNodes = nodes[i].childNodes;
for (var j = 0; j < subNodes.length; j++) {
var node = subNodes[j];
if (node.nodeType === 3) {
if (node.data) {
node.data = node.data.replace(/test text/g,"replacement test text");
}
}
}
}
};
myapp();