在 chrome 扩展中,我创建了我试图与每个选项卡一起存储的选项卡属性。做这个的最好方式是什么?我已经研究过使用 localStorage,但似乎有更简单的方法。数据绝不是永久的,它只在选项卡存在时才存在。
问问题
1380 次
2 回答
4
绝对没有必要使用localStorage
. 如果没有“数据绝不是永久的”这一概念,人们已经知道:标签 ID 在会话中是唯一的。从这个事实可以看出,数据是非持久的。
实现它的最佳方法是维护选项卡属性的哈希:
chrome.tabs.onCreated
(可选,将初始信息添加到选项卡哈希)chrome.tabs.onUpdated
- (添加/)更新选项卡哈希(URL 可用)chrome.tabs.onRemoved
- 删除哈希条目
选项卡对象并不昂贵:所有属性都是原语(布尔值、数字、字符串)。
例如(仅背景页面):
var tabStore = {}; // <-- Collection of tabs
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
tabStore[tabId] = tab;
});
chrome.tabs.onRemoved.addListener(function(tabId) {
delete tabStore[tabId];
});
于 2012-06-20T07:49:55.037 回答
2
Rob W 答案的重要附录。
确保还收听 tabs.onReplaced,并相应地更新 tabStore。
chrome.tabs.onReplaced.addListener(function(addedTabId, removedTabId) {
tabStore[addedTabId] = tabStore[removedTabId];
delete tabStore[removedTabId];
});
Chrome 可以在没有警告或标志的情况下更改标签页的 ID。据我所知,发生这种情况的唯一地方是当您在地址栏中输入搜索时谷歌的“即时搜索”。这可能是一个边缘案例,但如果你不跟踪它,它最终可能会成为一个非常隐蔽的问题。
于 2016-08-05T18:00:54.983 回答