Google chrome extension 如何存储Chrome和Safari扩展的特定选项卡的值?

Google chrome extension 如何存储Chrome和Safari扩展的特定选项卡的值?,google-chrome-extension,safari-extension,Google Chrome Extension,Safari Extension,我正在为所有浏览器开发一个扩展。如何在会话中存储特定于选项卡的值?我用NSISessionStore对象在Firefox中解决了这个问题。在Safari和Google Chrome中,我使用了会话存储;此对象存储具有特定域的特定选项卡的值。我需要一个解决方案来存储特定选项卡的值。如果您询问如何在选项卡的整个生命周期内管理数据,您只需在创建选项卡时为其创建一个对象,并在关闭选项卡时将其删除即可 // Create data store var tabDataStore = {}; // Creat

我正在为所有浏览器开发一个扩展。如何在会话中存储特定于选项卡的值?我用NSISessionStore对象在Firefox中解决了这个问题。在Safari和Google Chrome中,我使用了会话存储;此对象存储具有特定域的特定选项卡的值。我需要一个解决方案来存储特定选项卡的值。

如果您询问如何在选项卡的整个生命周期内管理数据,您只需在创建选项卡时为其创建一个对象,并在关闭选项卡时将其删除即可

// Create data store
var tabDataStore = {};
// Create listeners
chrome.tabs.onCreated.addListener(function (tab) {
    tabDataStore['tab_' + tab.id] = {
        urls: []
    };
});
chrome.tabs.onRemoved.addListener(function (tabId) {
    delete tabDataStore['tab_' + tabId];
});
// Save something against that tab's data
function saveUrl(tab) {
    tabDataStore['tab_' + tab.id].urls.push(tab.url);
}
// Load something from tab's data
function loadOriginalUrl(tab) {
    tabDataStore['tab_' + tab.id].urls[0];
}
然而,这只是一个假设,你可能想要完全不同的东西。此外,它还取决于您希望存储的时间和内容

有关选项卡的更多信息,请参阅


如果您想保留您可以使用的任何内容。

如果您询问如何在选项卡的整个生命周期内管理数据,您只需在创建选项卡时为其创建一个对象,并在关闭选项卡时将其删除即可

// Create data store
var tabDataStore = {};
// Create listeners
chrome.tabs.onCreated.addListener(function (tab) {
    tabDataStore['tab_' + tab.id] = {
        urls: []
    };
});
chrome.tabs.onRemoved.addListener(function (tabId) {
    delete tabDataStore['tab_' + tabId];
});
// Save something against that tab's data
function saveUrl(tab) {
    tabDataStore['tab_' + tab.id].urls.push(tab.url);
}
// Load something from tab's data
function loadOriginalUrl(tab) {
    tabDataStore['tab_' + tab.id].urls[0];
}
然而,这只是一个假设,你可能想要完全不同的东西。此外,它还取决于您希望存储的时间和内容

有关选项卡的更多信息,请参阅


如果您想持久化任何可以使用的内容。

一种简单的方法是将这些值存储在URL散列中,尽管这看起来并不理想,因为它看起来很凌乱

假设选项卡的URL为 您可以像这样将值存储在散列中


如果网站将哈希对象用于任何内容(如“页面内”锚定或ajaxy类型的内容),也会出现问题。一种简单的方法就是这样做,尽管看起来不太理想,因为将值存储在URL哈希中可能会很混乱

假设选项卡的URL为 您可以像这样将值存储在散列中

如果网站将哈希对象用于任何内容,例如“页面内”锚或ajaxy类型的内容,也会出现问题

在全局页面中,直接保存到选项卡。。例如,在来自注入脚本的消息上

// global page
safari.application.addEventListener("message", function(event){
    switch(event.name){
        case "saveData":
            event.target.page.tabData = { data: myData }
        break;
        case "getData":
            event.target.page.dispatchMessage("tabData", myData);
        break;
    }
}, false);
-

狩猎回答

在全局页面中,直接保存到选项卡。。例如,在来自注入脚本的消息上

// global page
safari.application.addEventListener("message", function(event){
    switch(event.name){
        case "saveData":
            event.target.page.tabData = { data: myData }
        break;
        case "getData":
            event.target.page.dispatchMessage("tabData", myData);
        break;
    }
}, false);
-


你能不能把这句话改一改,因为很难理解你到底想知道什么。你能不能把这句话改一改,因为很难理解你到底想知道什么。请注意,这个解决方案是特定于Chrome的。请注意,这个解决方案是特定于Chrome的。