0

我正在玩弄 Chrome 试图创建我的第一个扩展程序。基本上,我想创建一个在特定域上执行一些 DOM 操作的脚本。此外,我希望用户能够在访问该特定域时通过地址栏中显示的图标切换脚本。

到目前为止,我已经有了这个 manifest.json:

{
  "manifest_version": 2,

  "name": "Ekstrafri",
  "description": "Removes annoying boxes for paid articles.",
  "version": "1.0",
  "page_action": {
    "default_title": "Foobar"
  },
  "content_scripts": [
    {
      "matches": ["http://ekstrabladet.dk/*"],
      "js": ["jquery.min.js", "cleaner.js"],
      "run_at": "document_end"
    }
  ]
}

cleaner.js包含一些删除一些东西的 jQuery DOM 选择器。

当前设置有效,但上下文脚本一直被注入。我希望用户能够切换,这应该会触发用户接受或拒绝页面重新加载的确认提示。

无论如何,page_action似乎没有显示任何图标。根据文档,它应该在地址栏中显示一个图标。

我有两个问题:

  1. 如何在匹配的内容上显示此 page_action 图标?
  2. 如何将事件绑定到该图标?
4

1 回答 1

0

您可以在这里做的一件事是使用消息传递框架在 background.js 页面中获取和设置一个变量。本质上,当内容脚本运行时,您可以联系后台脚本来检查布尔变量的状态。然后,您可以确定是否执行脚本的其余部分。

chrome.extension.sendMessage({ cmd: "runScript" }, function (response) {
   if (response == true) {
     //Run the rest of your script inside here...
   }
});

您还可以使用此初始调用来绑定页面上的某些 UI,以便您可以切换此状态(即打开/关闭内容脚本)。在这个例子中,我使用了一个复选框。

$("chkOnOff").click(function(){

   var scriptOn  = ($(this).is(":checked");

   chrome.extension.sendMessage({ cmd: "updateRunScriptState", data: { "scriptOn" : scriptOn  }  }, function (response) {
       //Update confirmed
   });

});

background.js 页面看起来像这样:

//Global variable in background.js
var scriptOn = true;

chrome.extension.onMessage.addListener(
function (request, sender, sendResponse) {
    if (request.cmd == "runScript") {
        sendResponse(scriptOn);
    }

    if (request.cmd == "updateRunScriptState") {
        //here we can update the state
         scriptOn = request.data.scriptOn;
    }
});

并且不要忘记在清单中注册 background.js 页面。

..
  "background": {
    "scripts" : ["background.js"]
  },
..
于 2013-06-19T09:10:37.587 回答