Chrome扩展Javascript变量问题
我是js代码的新手(来自php/html/css),我正在尝试为Chrome创建一个个人扩展,允许浏览器用其他单词替换一些单词 所以我有了manifest.json:Chrome扩展Javascript变量问题,javascript,jquery,google-chrome,google-chrome-extension,var,Javascript,Jquery,Google Chrome,Google Chrome Extension,Var,我是js代码的新手(来自php/html/css),我正在尝试为Chrome创建一个个人扩展,允许浏览器用其他单词替换一些单词 所以我有了manifest.json: { "manifest_version": 2, "name": "Name1", "version": "14.3", "description": "Desc1", "browser_action": { "default_icon": "myicon.png", "popup":
{
"manifest_version": 2,
"name": "Name1",
"version": "14.3",
"description": "Desc1",
"browser_action": {
"default_icon": "myicon.png",
"popup": "popup.html"
},
"content_scripts": [
{
"matches": [
"http://*/*",
"https://*/*"
],
"js": [
"content.js"
],
"run_at": "document_end"
} ]
}
然后是我的content.js
var elements = document.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];
if (node.nodeType === 3) {
var text = node.nodeValue;
var replacedText = text.replace(/[wordtoreplace]/gi, '[neword1]');
var replacedText = text.replace(/[wordtoreplace2]/gi, '[neword1]');
var replacedText = text.replace(/[wordtoreplace3]/gi, '[neword1]');
if (replacedText !== text) {
element.replaceChild(document.createTextNode(replacedText), node);
}
}
}
}
var elements=document.getElementsByTagName('*');
对于(var i=0;i
但是浏览器只替换我的word1,而不是我的word2和3:(
原力帮不上忙,有人可以?错误在于重新声明和初始化同一变量。 如果声明一个变量并将其初始化为一个值,则在重新声明同一个变量并使用另一个值初始化后,结果将是: var myVar = "This is the first var"; var myVar = "Second var"; alert(myVar); var myVar=“这是第一个var”; var myVar=“第二个变量”; 预警(myVar); 现在警报结果为“第二个变量”。 重新声明变量在某些高级上下文中是有用的,但对正常编程完全不可用。变量一旦声明,就无法重新声明,因为它不可用,导致程序无法读取。 在任何情况下,如果为每个变量声明初始化值,最后一个将包含实际值 因此,您可以选择以下三行: var replacedText = text.replace(/[wordtoreplace]/gi, '[neword1]'); var replacedText = text.replace(/[wordtoreplace2]/gi, '[neword1]'); var replacedText = text.replace(/[wordtoreplace3]/gi, '[neword1]'); var replacedText=text.replace(/[wordtoreplace]/gi,[neword1]'); var replacedText=text.replace(/[wordtoreplace2]/gi,[neword1]'); var replacedText=text.replace(/[wordtoreplace3]/gi,[neword1]'); 必须更改为: var replacedText = text.replace(/[wordtoreplace]/gi, '[neword1]'); replacedText = replacedText.replace(/[wordtoreplace2]/gi, '[neword1]'); replacedText = replacedText.replace(/[wordtoreplace3]/gi, '[neword1]'); var replacedText=text.replace(/[wordtoreplace]/gi,[neword1]'); replacedText=replacedText.replace(/[wordtoreplace2]/gi,[neword1]'); replacedText=replacedText.replace(/[wordtoreplace3]/gi,[neword1]'); <> P>而是重新声明相同的变量,考虑在下面的例子中链式方法: var text = "word1 word2 word3"; var replacedText =text.replace("word1", "1") .replace("word2", "2") .replace("word3", "3"); alert(replacedText); var text=“word1 word2 word3”; var replacedText=text.replace(“word1”、“1”) .替换(“词语2”、“2”) .替换(“第3”、“3”字); 警报(替换文本); 现在replacedText的内容是“1 2 3”,因为将replace方法应用于字符串意味着获取一个新字符串,可以立即再次应用replace方法,依此类推 :replace中的标志gi表示:
- g:全球比赛
- i:不理会这个案子
i
修饰符使其独立于大小写。谢谢你的帮助,伙计!现在它工作了,但我有一个看起来很难解决的问题:例如,我要替换的单词是“石头”,因此句子=“石头在桌子上”变成“neword在桌子上”。但是句子“我爱火石歌”也变成了“我喜欢fireneword歌曲”。如果单词是“石头”=>replace,有没有办法说?@Lorenzo你有点越界了——最好问一首新的(或者更好,搜索)关于只匹配完整单词的正则表达式。@gaemaf您能解释一下为什么该代码是错误的吗?这样会更有帮助。