【问题标题】:Chrome Extension Javascript var issueChrome 扩展 Javascript var 问题
【发布时间】:2015-12-16 21:04:36
【问题描述】:

我是 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 :( 武力帮不了,有人可以吗?

【问题讨论】:

  • 想想你会如何用你知道的语言来做这件事。不会是这样的,对吧

标签: javascript jquery google-chrome google-chrome-extension var


【解决方案1】:

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

var myVar = "这是第一个变量"; var myVar = "第二个变量"; 警报(myVar);

现在警报的结果是“第二个变量”。

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

因此,您的以下三行:

var replaceText = text.replace(/[wordtoreplace]/gi, '[neword1]'); var replaceText = text.replace(/[wordtoreplace2]/gi, '[neword1]'); var replaceText = text.replace(/[wordtoreplace3]/gi, '[neword1]');

必须改为:

var replaceText = text.replace(/[wordtoreplace]/gi, '[neword1]'); 替换文本 = 替换文本.replace(/[wordtoreplace2]/gi, '[neword1]'); 替换文本 = 替换文本.replace(/[wordtoreplace3]/gi, '[neword1]');

如果要重新声明相同的变量,请考虑链接方法,如下例所示:

var text = "word1 word2 word3"; var 替换文本 =text.replace("word1", "1") .replace("word2", "2") .replace("word3", "3"); 警报(替换文本);

现在replacedText的内容是“1 2 3”,因为对字符串应用replace方法意味着获得一个新字符串,可以立即再次应用replace方法等等。

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

  • g:全局匹配
  • i:忽略大小写

【讨论】:

  • 也许你知道一种让 js 在大写或小写条件下也能工作的方法?例如“wordtoreplace”=“Wordtoreplace”=“woRDtoreplace”ecc?再次感谢你
  • @Lorenzo i 修饰符使其与大小写无关。
  • 感谢老兄的帮助!现在它可以工作了,但是我有一个看起来很难的问题:例如,我要替换的单词是“石头”,所以句子 =“石头在桌子上”变成了“新词在桌子上”。而且句子“i love firestone song”变成了“i love fireneword song”。有什么方法可以说只有当这个词完全是“石头”=>替换?
  • @Lorenzo 你有点超出了这个问题的范围 - 最好问一个新的(或者更好的是,搜索)关于只匹配完整单词的正则表达式。
  • @gaemaf 您能否添加对为什么该代码错误的解释?这会更有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-24
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多