2013-07-19 4 views
3

Я реализую расширения Google Chrome, которые обрабатывают вкладки. Это включает в себя, что я получаю onCreated, onUpdated и onActivated. Каждый раз я использую tabId в своей логике, первоначально сохраненной в массиве во время обработки событий onCreated. В принципе все работает нормально.Идентификатор вкладки Google Chrome изменяется в течение жизни табуляции

Однако я заметил сбой. Иногда идентификатор уже существующей вкладки изменяется. Таким образом, вкладка имеет идентификатор, который отсутствует в моем массиве, что, естественно, приводит к ошибкам. Я могу воспроизвести этот вопрос в следующем случае использования:

  • открыт 2 или более вкладок с различными URL-адреса
  • нагрузка в одной вкладке T URL-адрес, который уже загружен в другой вкладке

В этом случай, происходят две вещи: во-первых, вместо события onUpdated, событие onActivated для T огней. Во-вторых, T теперь имеет новый идентификатор, который обычно увеличивается на 2.

Это кажется мне далеко не интуитивно понятным. Я бы назвал это ошибкой. Кто-нибудь знает, что здесь происходит?

Любые советы приветствуются!

ответ

7

Это, скорее всего, вызвано prerendering. Это можно обнаружить, прослушивая событие chrome.webNavigation.onTabReplaced или chrome.tabs.onReplaced.

+1

Woah, это было быстро! И вы правы, это пререранция. Если я запускаю Chrome с помощью 'google-chrome -prerender-from-omnibox = disabled', все работает. Также запускается событие 'chrome.webNavigation.onTabReplaced'. Надеюсь, я смогу настроить его достаточно, чтобы сделать это для моих нужд. Во всяком случае, большое спасибо! – Christian

Смежные вопросы