Chrome扩展程序Javascript var问题

时间:2015-12-16 21:04:36

标签: 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": "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);
            }
        }
    }
}

但浏览器只替换我的word1而不是我的word2和3 :( 力量无法帮助,有人可以吗?

1 个答案:

答案 0 :(得分:1)

错误是重新声明和初始化同一个变量。 如果声明一个变量并将其初始化为一个值,并在重新声明相同的变量后立即用另一个值初始化,则结果为:

var myVar = "This is the first var";
var myVar = "Second var";
alert(myVar);

现在警报的结果是&#34;第二次变换&#34;。

重新声明变量在某些高级上下文中很有用,但对于正常编程完全没用。一旦声明了变量,就无法重新声明,因为无用且生成的程序变得不可读。 在任何情况下,如果您为每个变量声明初始化值,则最后一个将包含实际值。

因此,您的以下三行:

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 text = "word1 word2 word3";
var replacedText =text.replace("word1", "1")
        .replace("word2", "2")
        .replace("word3", "3");
alert(replacedText);

现在,替换文本的内容是&#34; 1 2 3&#34;因为将替换方法应用于字符串意味着获得一个新的字符串,可以立即再次使用替换方法,等等。

REPLACE:替换中的标志gi代表:

  • g:全球比赛
  • i:忽略大小写