2011-08-23 46 views
44

如何编写一个Chrome扩展程序,以便每次用户单击图标时,脚本都会运行但未打开弹出窗口? (我会自己查看这些文档,但是无论出于何种原因,他们突然停止了工作,因为我已经到了这一点)。每次点击Chrome扩展程序图标时都要运行脚本

我假设它只是正确设置清单。这是我现在有:

{ 
    "name": "My Extension", 
    "version": "0.1", 
    "description": "Does some simple stuff", 
    "browser_action": { 
    "popup" : "mine.html", 
    "default_icon": "logo.png" 
    }, 
    "permissions": [ 
    "notifications" 
    ] 
} 

回答

57

弹出删除从清单中您browser_action节并用background pages在后台脚本browser Action一起。

chrome.browserAction.onClicked.addListener(function(tab) { alert('icon clicked')}); 
+7

我到底在哪里放这个。如果没有mine.html,扩展名中的唯一文件是清单...以及图标。 – Endophage

+2

查看后台页面 - http://code.google.com/chrome/extensions/background_pages.html。这就是你放置长期运行的代码和跨不同页面通用的代码的地方。以上文档的链接以browserAction.onClicked – arunkumar

+0

为例。我最初尝试了一个背景页面,但没有意识到browserAction.onClicked。 – Endophage

4

除了指定的弹出页面,使用chrome.browserAction.onClicked API,记录here

32

首先,如果您不想显示弹出窗口,请从manifest.json(显示在您的问题中)中删除"popup" : "mine.html"

manifest.json会是这个样子:

{ 
    "name": "My Extension", 
    "version": "0.1", 
    "manifest_version" : 2, 
    "description": "Does some simple stuff", 
    "background" : { 
    "scripts" : ["background.js"] 
    }, 
    "browser_action": { 
    "default_icon": "logo .png" 
    }, 
    "permissions": ["activeTab"] 
} 
  • 注意manifest_version必须在那里,它必须是2
  • 请注意,已添加activeTab权限。
  • 请注意,只有在单击浏览器操作按钮时才能执行一项操作:可以显示弹出窗口,也可以执行脚本,但不能同时执行这两个操作。

其次,执行单击该图标时,一个脚本,将下面的代码在你的background.js文件(文件名是在您的manifest.json指定):

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

最后,testScript.js是你应该把你想要执行的代码放到图标被点击时。

+1

正确工作的唯一方法。谢谢 – myh34d

+3

从2017年2月起,这个解决方案完全实现了原始问题中提出的问题。 – mjamore

+0

如何将选项卡信息传递给“testScript.js”? – kerzek

0

这就是我所需要的,但我应该补充一点: 如果您只需要一次性事件,就像用户点击扩展程序的图标时一样,那么背景页面会浪费资源,因为它会运行所有的时间背景。 改为使用事件页面:

"background": { 
     "scripts": ["script.js"], 
     "persistent": false 
     } 
相关问题