[英]Session for each tab - Google Chrome Extension
在 Google Chrome 扩展程序中,是否可以为每个选项卡设置不同的“会话”?
例如,Adblock 就是这样做的:它显示当前页面被阻止的广告数量,每个标签的数量都会发生变化(如果您打开了 2 个窗口,每个窗口的数量不同......)
例如,如果我使用 Chrome 演示更改单击图标:
清单文件
{
"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
}
背景.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)
谢谢
chrome.browserAction
API通过提供并采用tabId
作为参数来考虑选项卡。
例如,这是一个onClicked
侦听器的预期签名:
回调参数应该是一个如下所示的函数:
function( tabs.Tab tab) {...};
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
});
}
当然,这意味着您必须按标签存储数据。 最简单的方法是使current
对象(或数组,但它会是稀疏的)与tabId
s 充当键。
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)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.