прослушиватель событий при смене вкладки

#google-chrome-extension

#google-chrome-extension

Вопрос:

Мне нужно сохранять некоторые данные каждый раз, когда я перехожу на какую-то другую вкладку в том же окне или в другом окне с помощью Chrome storage API или даже при создании новой вкладки. Итак, в основном, когда моя активная вкладка больше не активна.

Так, например, если я нахожусь на вкладке A, а затем перехожу на вкладку B (или создаю новую вкладку). Когда это переключение происходит с A на B, мне нужно сохранить данные с веб-сайта, работающего на вкладке A. (Я получаю данные с сайта на вкладке А с помощью скрипта содержимого.)

Более конкретным примером может быть, предположим, что я нахожусь на сайте YouTube, и у меня запущен таймер ожидания (с использованием скрипта контента). Поэтому, когда я перехожу на какой-то другой сайт, я хочу остановить время, получить текущее оставшееся время и сохранить его. и если другим сайтом тоже является YouTube (на вкладке B), я бы начал отсчет времени с ранее сохраненного значения.

Есть ли какой-нибудь прослушиватель событий для этого? Я просмотрел документацию chrome.tabs , но не смог в этом разобраться. Я видел onActivated прослушиватель событий, но я не уверен, что это было бы полезно. Или есть какой-то другой способ добиться этого?

Комментарии:

1. Используйте стандартное событие DOM visibilitychange и проверьте document.visibilityState. В сценарии содержимого.

Ответ №1:

Да, согласно документации onActivated :

Срабатывает при изменении активной вкладки в окне.

В качестве альтернативы также можно использовать сценарии содержимого, которые уведомляют ваше расширение, когда страница получает или теряет фокус с помощью window.onfocus и window.onblur . Таким образом, вы сможете отслеживать видимость вкладок, хотя вам следует тщательно выбирать требуемое разрешение.

Комментарии:

1. 1) OnActivated не сообщает, какая вкладка была сфокусирована ранее, поэтому вам нужно описать, как отслеживать эту информацию, принимая во внимание, что фоновый скрипт может выгружаться тем временем, поэтому информация должна храниться в хранилище. 2) onblur не кажется полезным, поскольку он срабатывает при переключении на devtools или другое приложение.