2012-06-14 2 views
1

Созданы ли они поэтапно? В основном это целые числа, но мне интересно, генерируются ли они определенным образом. Знание этого было бы полезно для меня для приложения, которое я пишу.Как генерируются идентификаторы вкладки в Chrome?

EDIT: Мне нужно сохранить в памяти идентификаторы, и я думаю, могу ли я заказать их для поиска. Если они созданы с увеличением числа легко осуществить поиск в виде двоичного поиска, поэтому я прошу

+0

Вы никогда не должны пытаться угадать идентификаторы –

ответ

3

Единственное, что я могу найти в документации, относящейся к идентификатору является следующий отрывок:

id (целое число) Идентификатор вкладки. Идентификаторы вкладок уникальны в сеансе браузера.

Итак, что мы можем извлечь из этого, так это то, что никакие две вкладки никогда не получат одинаковый идентификатор в том же сеансе. В документах нет информации о том, как они создаются.

В конечном счете, я думаю, что любой подход, который является прогностическим в этом смысле, обречен на ошибки & сбой, вы должны создавать реагирующее приложение против прогнозирующего.

Вместо того, чтобы предположить, что следующая вкладка будет открыта с помощью ID # 12, запишите создание вкладки, тогда вы будете знать идентификатор и можете выполнять операции на основе этого.

Что вам нужно, это tab onCreated event. Когда будет создана вкладка, вы получите tab Object, который вы можете получить tabid и windowid и выполнить любые действия, которые вы желаете.

Поскольку вы не сообщили нам о своей конечной цели, я не могу дать вам никаких конкретных примеров/кода, которые помогут вам, кроме как указать вам в правильном направлении.


Продолжение от комментариев:

Если вы просто хотите посмотреть на вкладку по идентификатору не было бы легче хранить вкладку мета-данные в словаре вместо списка ?

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 записей. Хотя это не так быстро по сравнению с скомпилированными языками, это будет sub millisecond при работе со 100-ю вкладками. Я не думаю, что вам нужно слишком беспокоиться о производительности.

Если ваше приложение постоянно ищет это, рассмотрите локальный кеш или словарь, упомянутый выше.

+0

я видел в документации, и я не мог найти любую другую информацию, чем то, что вы вывесили. В частности, мне нужно хранить в памяти идентификаторы, и я думаю, могу ли я заказать их для поиска. ЕСЛИ они созданы с увеличением числа, легко реализовать поиск как бинарный поиск, поэтому я спрашиваю. – Raffo

+0

Какой поиск? Вы систематически просматриваете вкладки? Или просто пытаться найти их по ID? – Aren

+0

Учитывая идентификатор вкладки, сгенерированный из события, мне нужно найти объект, связанный с этим идентификатором табуляции. Идея состоит в том, чтобы сохранить список/массив, упорядоченный по идентификатору, если они являются инкрементальными. – 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. Идентификаторы вкладок, да, являются инкрементальными, однако они не являются «совершенно» инкрементальными. Вы можете позвонить по телефону chrome.tabs.create() и завершить работу с идентификационными номерами 51 и 58 без действительных вкладок в диапазоне 52-57. That's Chrome behavior.

  4. для вашей функции поиска, просто используйте этот

    chrome.tabs.query({ /* EMPTY SEARCH PARAMETERS */ }, function(tabs){ /* DO WHAT YOU WANT HERE */ }) 
    
Смежные вопросы