2012-06-14 389 views
1

它們是否增量式創建?基本上他們是整數,但我想知道它們是否以特定方式產生。知道這對我寫一個應用程序是有用的。在Chrome中如何生成Tab ID?

編輯:我需要保持在內存中的ID,我想如果我可以命令他們能夠做一個搜索。如果他們有越來越多的創建很容易實現搜索的二進制搜索,這就是爲什麼我問

+0

你不應該試圖猜測標識 –

回答

3

我可以屬於該ID的文檔中找到的唯一的事情是下面的摘錄:

id(整數) 選項卡的ID。標籤ID在瀏覽器會話中是唯一的。

所以我們可以從中得到的是,沒有兩個標籤會在同一個會話中獲得相同的ID。文檔中沒有關於它們如何生成的信息。

最終我認爲任何在這個意義上預測的方法註定會出現錯誤&失敗,您應該構建一個響應式應用程序與預測式應用程序。

而不是假設下一個選項卡將打開ID#12,捕獲創建選項卡,然後您將知道該ID並可以執行操作基於此。你需要的是tab onCreated event。當一個標籤被創建時,你會得到一個​​,你可以從中獲得tabidwindowid並執行你想要的任何動作。

既然你沒有告訴我們關於你的最終目標的很多,我不能給你任何具體的例子/代碼來幫助你,而不是指出你在正確的方向。從評論


繼續:

如果你只是希望查找由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個製表符時會比毫秒短。我不認爲你需要擔心表現太多。

如果你的應用程序不斷地查找這個,考慮一下本地緩存或上面提到的字典。

+0

我看到的文件,我找不到比你張貼的內容等信息。特別是我需要記住身份證,我想如果我能命令他們能夠搜索。如果它們的數量越來越多,就很容易將搜索作爲二分查找來實現,這就是爲什麼我要問。 – Raffo

+0

什麼樣的搜索?你是否有系統地在標籤中搜索?或者只是想通過ID查找它們? – Aren

+0

給定從事件生成的Tab ID,我需要找到與此Tab ID關聯的對象。這個想法是保持由ID排序的列表/數組,如果它們是增量的。 – Raffo

0

要跟蹤所有標籤並解決您的問題,請在您的擴展上下文中創建一個數組。

window.CurrentTabs = {}; 

然後,只需掛鉤刪除和添加,以跟蹤所有活動選項卡。

chrome.tabs.onCreated.addListener(function(tab) { window.CurrentTabs[tab.id]=tab }); 
chrome.tabs.onRemoved.addListener(function(tabID){ delete window.CurrentTabs[tabID]; }); 

一些提到:

  1. 你還需要擴展啓動時運行的一次性chrome.tabs.query(...),因爲有哪個標籤可在此之前你的擴展的激活點存在幾個原因

  2. 你還需要研究其他場景,例如拖動窗口和那種東西的標籤(我不知道真的發生了什麼,但有事件處理程序)

  3. 選項卡ID是,是遞增的,但它們不是「完美」的增量。您可以撥打電話chrome.tabs.create(),並結束標籤ID 5158,並在52-57範圍內沒有有效的標籤。 That's Chrome behavior

  4. 您的搜索功能,只需使用該

    chrome.tabs.query({ /* EMPTY SEARCH PARAMETERS */ }, function(tabs){ /* DO WHAT YOU WANT HERE */ })