如何存储Chrome和Safari扩展程序的特定标签的值?

时间:2011-07-28 13:20:53

标签: google-chrome-extension safari-extension

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

3 个答案:

答案 0 :(得分: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];
}

然而,这是一个假设,你可能想要一些完全不同的东西。此外,它取决于您想要存储的时间和内容。

有关标签的更多信息,请参阅official documentation

如果您想保留任何内容,可以使用localStorage

答案 1 :(得分:0)

一种简单的方法,虽然不理想,但看起来很麻烦,就是将值存储在URL哈希中

说标签的网址是http://whatever.com/ 你可以将值存储在哈希中,就像这样 http://whatever.com/#value1=12&value2=10&value3=15212

如果网站使用哈希对象进行任何处理,例如“在页面中”的锚点或者ajaxy类型的东西,那么也会出现问题

答案 2 :(得分:0)

Safari答案

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

// 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);

-

// injected page

// first save data
safari.self.tab.dispatchMessage("saveData", {firstname:"mike", age: 25} );

// setup listner to recevie data
safari.self.addEventListener("message", function(event){
    switch(event.name){
        case "tabData":
            // get data for page
            console.debug(event.message);
            // { firstname: "mike", age: 25 }
        break;
    }
}, false);

// send message to trigger response
safari.self.tab.dispatchMessage("getData", {} );