簡體   English   中英

Chrome Extension Javascript var問題

[英]Chrome Extension Javascript var issue

我是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 :(力量無能為力,有人可以嗎?

錯誤是重新聲明和初始化同一變量。 如果聲明一個變量並將其初始化為一個值,然后在重新聲明相同的變量並立即使用另一個值進行初始化后,結果將是:

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

現在,alert的結果是“ Second var”。

在某些高級上下文中,重新聲明變量是有用的,但對於正常編程完全沒有用。 變量一旦聲明,就無法重新聲明,因為它無用,並且所產生的程序變得不可讀。 無論如何,如果您為每個變量聲明初始化值,則最后一個將包含實際值。

因此,您的以下三行:

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);

現在,replaceText的內容為“ 1 2 3”,因為對字符串應用replace方法意味着在夾上獲取新的字符串可以立即再次再次應用replace方法,依此類推。

替換 :替換中的標志gi表示:

  • g:全球比賽
  • 我:忽略大小寫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM