0

在 chrome 扩展中,我创建了我试图与每个选项卡一起存储的选项卡属性。做这个的最好方式是什么?我已经研究过使用 localStorage,但似乎有更简单的方法。数据绝不是永久的,它只在选项卡存在时才存在。

4

2 回答 2

4

绝对没有必要使用localStorage. 如果没有“数据绝不是永久的”这一概念,人们已经知道:标签 ID 在会话中是唯一的。从这个事实可以看出,数据是非持久的。

实现它的最佳方法是维护选项卡属性的哈希:

选项卡对象并不昂贵:所有属性都是原语(布尔值、数字、字符串)。

例如(仅背景页面):

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 回答