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