0

我想要一个 Chrome 扩展来替换页面上的文本。我已经让所有代码都在 Javascript 方面工作,并且它在页面加载时运行完美,问题是我只希望它在您单击工具栏上的按钮时替换页面上的文本。

我在工具栏上设置了一个按钮,但替换的 Javascript 仍然只是在页面加载时运行,而不是在您单击按钮时运行。此外,当您单击工具栏按钮时,尽管它没有执行任何操作,但它仍然会显示一个弹出窗口。我要做的就是在单击工具栏按钮时运行文本替换代码,而不显示 popup.html 框。

目前的代码如下,

清单.json

{
  "name": "Browser Action",
  "version": "0.0.1",
    "manifest_version": 2,
  "description": "Show how options page works",
  // Needed to retrieve options from content script
  "background": "background.html",

  // This is how you load Browser Action. Nearly equal to Page one.
  "browser_action": {
      "default_icon": "icon.png",
      "popup": "popup.html"
  },
  "content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "js" : ["popup.js"]
    }
  ]
}

popup.js

function htmlreplace(a, b, element) {    
    if (!element) element = document.body;    
    var nodes = element.childNodes;
    for (var n=0; n<nodes.length; n++) {
        if (nodes[n].nodeType == Node.TEXT_NODE) {
            var r = new RegExp(a, 'gi');
            nodes[n].textContent = nodes[n].textContent.replace(r, b);
        } else {
            htmlreplace(a, b, nodes[n]);
        }
    }
}

htmlreplace('a', 'IT WORKS!!!');

popup.html - 空白

背景.html

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript(null, {file: "popup.js"});
});
4

2 回答 2

1

您只需对清单进行以下更改:

  • 删除content_scripts部分。
  • 删除browser_action.popup条目。
  • 添加一个部分:"permissions": ["activeTab"]
  • background将您的部分更改为:"background": { "scripts": ["background.js"] }并将您的文件重命名background.htmlbackground.js
于 2013-11-13T12:55:29.707 回答
1

必须进行一些更改(其中大部分是 rsanchez 提到的 - 但不是全部),还有一些可以/应该进行的更改。

因此,我不会列出可以/应该/必须更改的内容,而是演示一个示例扩展,它可以满足您的需求。


首先要做的事情- 有关与您的问题/问题相关的一些关键概念的更多信息:


扩展目录结构:

          extension-root-directory/
           |_____manifest.json
           |_____background.js
           |_____content.js

清单.json:

{
    "manifest_version": 2,
    "name":    "Test Extension",
    "version": "0.0",
    "offline_enabled": true,

    "background": {
        "persistent": false,
        "scripts": ["./bg/background.js"]
    },

    "browser_action": {
        "default_title": "Test Extension"
        //"default_icon": {
        //    "19": "img/icon19.png",
        //    "38": "img/icon38.png"
        //},
    },

    "permissions": [
        "activeTab"
    ]
}

背景.js:

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(tab.id, { file: "content.js" });
});

内容.js:

function htmlReplace(a, b, element) {
    if (!element) {
        element = document.body;
    }

    var r = new RegExp(a, "gi");
    var nodes = element.childNodes;
    for (var n = 0; n < nodes.length; n++) {
        if (nodes[n].nodeType == Node.TEXT_NODE) {
            nodes[n].textContent = nodes[n].textContent.replace(r, b);
        } else {
            htmlReplace(a, b, nodes[n]);
        }
    }
}
htmlReplace("a", "IT WORKS !!!");
于 2013-11-13T13:21:30.887 回答