Firefox WebExtension:特定于选项卡的存储

时间:2016-07-15 01:49:50

标签: firefox firefox-addon local-storage firefox-webextensions

我正在编写一个Firefox WebExtension,使用chrome.storage.local来保存状态,这是我在首次选择扩展时所做的。

如何将状态限制为特定标签?我希望每个标签都有自己的数据版本。

由于

1 个答案:

答案 0 :(得分:0)

与大多数存储方法一样,您必须对存储的数据强加一个结构,以便您可以根据需要存储和检索数据。在这种情况下,您可以set()get()与特定标签相关联的数据。有很多方法可以做到这一点。最好的"组织数据的方式取决于(其中包括)您存储的数据,概念组织数据的方式以及每个选项卡的独特之处(从您的扩展程序的角度来看;即为什么数据由制表符分隔,可能是它实际上是由URL分隔,而不是制表符。

你想要做的事情中有太多未指明的部分,以便能够为你提供关于什么是最好的"方法是组织你的数据。但是,这是一个可能的方法的一个例子:

// callback to get and set() just checks for errors
function reportIfStorageError() {
    if (chrome.runtime.lastError) {
        console.log(chrome.runtime.lastError);
    }
}
function getKeyForTab(tab) {
    //Use a key that is a combination of text that for this add-on is
    //  unique to data being stored for a tab, "tabData", plus the tab's ID.
    //  This allows set/get to be just for the data for the tab while
    //  laving all other keys that don't start with "tabData" available
    //  to store any other non-tab related data we desire. In other words,
    //  we don't need to worry about a conflict between some unknown tab ID
    //  and any other key we choose to use.
    return "tabData" + tab.id;
}
function getLocalStorageForTab(tab, theTabsCompleteDataObject) {
    let key = getKeyForTab(tab);
    chrome.storage.local.get({key: theTabsCompleteDataObject}, reportIfStorageError);
    return theTabsCompleteDataObject;
}
function setLocalStorageForTab(tab, theTabsCompleteDataObject) {
    let key = getKeyForTab(tab);
    chrome.storage.local.set({key: theTabsCompleteDataObject}, reportIfStorageError);
}

在上面的示例中,为选项卡创建了一个键,该键对于该选项卡是唯一的。为此,我们选择一个前缀tabData,对于此附加组件,我们将其定义为始终启动用于制表符数据的键的内容。这样做是因为我们无法控制选项卡的ID。如果我们只使用ID作为密钥,我们将不得不考虑ID与我们用来存储其他数据的密钥相匹配的可能性。这样,我们只需为不以tabData开头的其他数据选择密钥。特定标签的完整键是前缀,tabData与标签的ID tab.id连接。

提供给tabgetLocalDataForTab()的{​​{1}}是标签的tabs.Tab。变量setLocalDataForTab()是一个object,其中包含与标签相关联的所有数据。