1

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

4

3 回答 3

1

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

// 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];
}

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

有关选项卡的更多信息可以在官方文档中找到。

如果你想持久化任何东西,你可以使用localStorage

于 2011-07-28T14:08:59.743 回答
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", {} );
于 2014-08-18T21:13:50.817 回答
0

一个简单的方法,虽然不理想,因为它看起来很乱,将值存储在 URL 哈希中

说选项卡的 URL 是http://whatever.com/你可以像这样http://whatever.com/#value1=12&value2=10&value3=15212 将值存储在哈希中

如果网站将散列对象用于诸如“页内”锚点或 ajaxy 类型的东西之类的任何内容,也会出现问题

于 2013-12-14T12:48:19.347 回答