Расширение My Chrome внедряет контент-скрипт на каждую страницу ("matches": ["http://*/*", "https://*/*"]
).Сценарий содержимого отправит сообщение (chrome.extension.sendRequest
) на фоновую страницу, а на фоновой странице регистрируется обработчик события:
chrome.extension.onRequest.addListener(
function (request, sender, callback) {…}
);
Я заметил, что эти события запускаются, когда я начинаю печатать в омнибоксе- даже до того, как я нажму Enter, чтобы загрузить страницу назначения.
Сценарий:
- Запустить Chrome
- Начать вводить в омнибоксе.Фактически, как только омнибокс имеет фокус, запускается мой обработчик событий
chrome.extension.onRequest.addListener()
[background.html].
Странно то, что значение sender.tab.index равно -1,поэтому он не отображается на «реальную» вкладку.Кроме того, когда я продолжаю переключать фокус с омнибокса и обратно, события продолжают срабатывать.Каждый раз sender.tab.index равен -1, но sender.tab.id увеличивается на 2 (43, 45, 47,…).Это поведение легко воспроизводимо.
Затем, когда я на самом деле выбираю URL (скажем, example.com), нажимая Enter в омнибоксе, и страница загружается в браузере / вкладке, я получаю еще одно событие.На этот раз, однако, sender.tab.index неотрицателен - он представляет фактическую вкладку браузера, и мой обработчик скриптов контента может выполнять свою работу.
Это поведение - скрипт контента внедряется в «фантом»”Страница для действий омнибокса - известна, и документирована ли она где-нибудь?И как правильно обработать мой обработчик событий?Допустим, мой обработчик скриптов контента должен манипулировать веб-страницей.Должен ли я проверять sender.tab.index и выполнять эту работу, только если sender.tab.index != -1
?