它們是否增量式創建?基本上他們是整數,但我想知道它們是否以特定方式產生。知道這對我寫一個應用程序是有用的。在Chrome中如何生成Tab ID?
編輯:我需要保持在內存中的ID,我想如果我可以命令他們能夠做一個搜索。如果他們有越來越多的創建很容易實現搜索的二進制搜索,這就是爲什麼我問
它們是否增量式創建?基本上他們是整數,但我想知道它們是否以特定方式產生。知道這對我寫一個應用程序是有用的。在Chrome中如何生成Tab ID?
編輯:我需要保持在內存中的ID,我想如果我可以命令他們能夠做一個搜索。如果他們有越來越多的創建很容易實現搜索的二進制搜索,這就是爲什麼我問
我可以屬於該ID的文檔中找到的唯一的事情是下面的摘錄:
id(整數) 選項卡的ID。標籤ID在瀏覽器會話中是唯一的。
所以我們可以從中得到的是,沒有兩個標籤會在同一個會話中獲得相同的ID。文檔中沒有關於它們如何生成的信息。
最終我認爲任何在這個意義上預測的方法註定會出現錯誤&失敗,您應該構建一個響應式應用程序與預測式應用程序。
而不是假設下一個選項卡將打開ID#12,捕獲創建選項卡,然後您將知道該ID並可以執行操作基於此。你需要的是tab onCreated event
。當一個標籤被創建時,你會得到一個,你可以從中獲得tabid
和windowid
並執行你想要的任何動作。
既然你沒有告訴我們關於你的最終目標的很多,我不能給你任何具體的例子/代碼來幫助你,而不是指出你在正確的方向。從評論
繼續:
如果你只是希望查找由ID標籤豈不是更容易儲存您的標籤元數據在一本字典而不是列表?
var metadataRepository = {};
metadataRepository[tab.id] = tab.metadata;
然後:
var metadata = metadataRepository[tabId];
if (metadata) {
// Do Stuff
}
甚至更多的信息:
由於我目前的Chrome(19.xxx ...)的V8引擎支持JavaScript 1.6中的方法的Array.filter(...)
我做了一個小測試here模擬使用過濾器搜索數組並進行類型檢測&字符串搜索每個迭代(常見的東西)。
我的機器花了25毫秒(相對較新,i7-2600k)通過10,000個條目。雖然這與編譯語言相比並不是很快,但在處理100個製表符時會比毫秒短。我不認爲你需要擔心表現太多。
如果你的應用程序不斷地查找這個,考慮一下本地緩存或上面提到的字典。
要跟蹤所有標籤並解決您的問題,請在您的擴展上下文中創建一個數組。
window.CurrentTabs = {};
然後,只需掛鉤刪除和添加,以跟蹤所有活動選項卡。
chrome.tabs.onCreated.addListener(function(tab) { window.CurrentTabs[tab.id]=tab });
chrome.tabs.onRemoved.addListener(function(tabID){ delete window.CurrentTabs[tabID]; });
一些提到:
你還需要擴展啓動時運行的一次性chrome.tabs.query(...)
,因爲有哪個標籤可在此之前你的擴展的激活點存在幾個原因
你還需要研究其他場景,例如拖動窗口和那種東西的標籤(我不知道真的發生了什麼,但有事件處理程序)
選項卡ID是,是遞增的,但它們不是「完美」的增量。您可以撥打電話chrome.tabs.create()
,並結束標籤ID 51
和58
,並在52-57
範圍內沒有有效的標籤。 That's Chrome behavior。
您的搜索功能,只需使用該
chrome.tabs.query({ /* EMPTY SEARCH PARAMETERS */ }, function(tabs){ /* DO WHAT YOU WANT HERE */ })
你不應該試圖猜測標識 –