Javascript 每个选项卡的会话-Google Chrome扩展
在GoogleChrome扩展中,有没有一种方法可以为每个标签设置不同的“会话” 例如,Adblock就是这样做的:它显示当前页面被阻止的广告的数量,每个选项卡的数量都会发生变化(如果打开了两个窗口,每个窗口的数量也会不同……) 例如,如果我使用Chrome演示在单击时更改图标: manifest.jsonJavascript 每个选项卡的会话-Google Chrome扩展,javascript,google-chrome,google-chrome-extension,tabs,Javascript,Google Chrome,Google Chrome Extension,Tabs,在GoogleChrome扩展中,有没有一种方法可以为每个标签设置不同的“会话” 例如,Adblock就是这样做的:它显示当前页面被阻止的广告的数量,每个选项卡的数量都会发生变化(如果打开了两个窗口,每个窗口的数量也会不同……) 例如,如果我使用Chrome演示在单击时更改图标: manifest.json { "name": "A browser action which changes its icon when clicked", "description": "Change brow
{
"name": "A browser action which changes its icon when clicked",
"description": "Change browser action color when its icon is clicked",
"version": "1.2",
"background": { "scripts": ["background.js"] },
"browser_action": {
"name": "Click to change the icon's color"
},
"manifest_version": 2
}
background.js
var min = 1;
var max = 5;
var current = min;
function updateIcon() {
chrome.browserAction.setIcon({path:"icon" + current + ".png"});
current++;
if (current > max)
current = min;
}
chrome.browserAction.onClicked.addListener(updateIcon);
updateIcon();
有没有办法添加一些代码,使每个选项卡上都有不同的“范围”?例如,如果我在第一个选项卡上单击3次,它将显示icon3,如果我打开一个新选项卡,它将显示此选项卡的icon1(但第一个选项卡仍然显示icon3)
感谢通过提供并将tabId
作为参数来考虑选项卡
例如,这里是一个点击的监听器的预期签名:
回调参数应该是如下所示的函数:
function( tabs.Tab tab) {...};
选项卡
因此,在updateIcon
函数中,您可以获得选项卡的ID:
function updateIcon(tab) {
// Can use tab.id here
/* ... */
chrome.browserAction.setIcon({
path:"icon" + current + ".png",
tabId: tab.id // Limit change to tab
});
}
当然,这意味着您必须在每个选项卡上存储数据。最简单的方法是使用tabId
作为键将current
设置为对象(或数组,但它将是稀疏的)
var min = 1;
var max = 5;
var current = {};
function updateIcon(tab) {
if (!current[tab.id]) { // Not yet defined
current[tab.id] = min;
}
chrome.browserAction.setIcon({
path: "icon" + current[tab.id] + ".png",
tabId: tab.id
});
if (current[tab.id] === max) {
current[tab.id] = min;
} else {
current[tab.id]++;
}
}
如果您担心选项卡数据会随着时间的推移而增长,您可以收听chrome.tabs.onRemoved
来清除数据
您可能还需要注意chrome.tabs.onReplaced
(它会替换选项卡中的内容,更改ID)。太棒了,谢谢!我开始看页面动作,而不是浏览动作,但我被它卡住了。。。你的解决方案要简单得多,因为谷歌的页面操作完全是浏览器操作的低级版本,因为它们不再只能显示在相关页面上。他们甚至告诉“请考虑使用浏览器动作来代替,这样用户就可以在文档中正确地与扩展”进行交互。