2012-06-20 80 views
0

在Chrome擴展中,我創建了試圖與每個選項卡存儲的選項卡屬性。做這個的最好方式是什麼?我研究過使用localStorage,但似乎可能有一個更簡單的方法。數據絕不是永久性的,它只存在於選項卡中。Chrome擴展附加屬性到每個選項卡

+1

你可能可以創建一個「數組」,其中的關鍵是標籤ID和內容是你想要的 –

+0

是的,這將實際上工作。我可能必須在關閉的選項卡上有一個清理腳本,以便數組不會使用大量選項卡進行擴展。 – nathancahill

回答

4

絕對沒有必要使用localStorage。如果沒有「數據絕不是永久的」概念,人們已經知道:標籤ID在會話中是唯一的。由此可見,數據是非持久性的。

最好的方法實現它是保持標籤屬性的哈希:

Tab對象都不貴:所有屬性是原始s(布爾值,數字,字符串)。

例如(僅後臺頁面):

var tabStore = {};   // <-- Collection of tabs 
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
    tabStore[tabId] = tab; 
}); 
chrome.tabs.onRemoved.addListener(function(tabId) { 
    delete tabStore[tabId]; 
}); 
+0

昨天,我只是試圖將自己的工作變成現實,在與本地存儲混淆的一天後,得出了完全相同的結論。很高興知道我終於在正確的地方結束了!感謝:) –

+0

請注意,對於每個「頁面生命週期」,'onUpdated'會被觸發兩次('changeInfo.status':加載,完成)。所以,如果你只想在頁面改變事件上只行動一次,忽略其中的一個,例如'if(changeInfo.status!='loading'){/ * ... .do任何你想要的* /}'。 –

+0

謝天謝地(不能說OP)我不需要onUpdated事件,但是很好的信息:) –

1

重要增編羅布W公司的答覆。

確保還要聽取tabs.onReplaced,並相應地更新tabStore。

chrome.tabs.onReplaced.addListener(function(addedTabId, removedTabId) { 
    tabStore[addedTabId] = tabStore[removedTabId]; 
    delete tabStore[removedTabId]; 
}); 

Chrome可以更改引擎蓋下標籤的ID而不會發出警告或標誌。據我所知,唯一發生這種情況的是Google在搜索地址欄時輸入的「即時搜索」。這可能是一個邊緣情況,但如果你不跟蹤這一點,它可能最終會成爲一個非常陰險的問題。

相關問題