2011-07-28 32 views
0

我正在開發所有瀏覽器的擴展。如何在會話中存儲特定於選項卡的值?我用一個NSISessionStore對象在Firefox中解決了這個問題。在Safari和Google Chrome中,我使用了SessionStorage;此對象存儲具有特定域的特定選項卡的值。我想要一個解決方案來存儲特定選項卡的值。如何爲Chrome和Safari擴展的特定標籤存儲值?

+0

能否請你改寫這是它很難真正理解你的想知道。 – Alasdair

回答

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

+0

請注意,此解決方案是Chrome特定的。 – Brian

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", {});