10

基本上,我正在尝试按照 Google 文档做一些 chrome 扩展。每次单击扩展按钮时,我都想注入一个脚本。到目前为止,这是我的清单:

    {
  "name": "Example",
  "manifest_version": 2,
  "version": "1.0",
  "permissions": [
    "tabs"
  ],
  "description": "My Chrome extension.",
  "browser_action": {
    "default_icon": "icon.png"
  },
   "background": {
    "scripts": ["background.js"]
  }
}

这是我的 background.js:

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

问题是 content_script 没有被触发,即使尝试这么简单alert("aaa");

你能告诉我我做错了什么吗?我想不通。

4

2 回答 2

14

为了在页面上执行内容脚本,您必须在清单文件中请求正确的主机权限。

由于您想在单击浏览器操作按钮时插入内容脚本,因此请求activeTab权限就足够了。此外,您可以删除权限,将权限警告tabs的数量减少到零!

{
  "name": "Example",
  "manifest_version": 2,
  "version": "1.0",
  "permissions": [
    "activeTab"
  ],
  "browser_action": {
    "default_icon": "icon.png"
  },
   "background": {
    "scripts": ["background.js"]
  }
}

(该activeTab权限已在 Chrome 26 中引入,如果您需要支持 Chrome 25 及更早版本,请在清单文件中添加*://*/*<all_urls>权限)。

注意:如果您向 中添加回调chrome.tabs.executeScript,您将在 中收到有用的错误消息chrome.runtime.lastError.message

无法访问 url "http....." 扩展清单的内容必须请求访问此主机的权限。

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(tab.id, {
        file: "content_script.js"
    }, function() {
        if (chrome.runtime.lastError) {
            console.error(chrome.runtime.lastError.message);
        }
    });
});
于 2013-06-09T17:26:17.587 回答
6

除了 Rob 的修复之外,您还应该使用{file: "content_script.js"}

于 2013-06-09T18:45:57.810 回答