Есть ли способ узнать, когда вкладка в браузере закрыта окном?

TL;DR: Я работаю над расширением Chrome, где мне нужно увеличивать счетчик только тогда, когда вкладка видна и не закрыта другим окном. Есть ли способ это обнаружить?


Я пробовал использовать API видимости страницы, но вот в чем проблема:

Представьте, что у меня установлены бок о бок два окна. Я сосредоточен на вкладке "X" из окна "A". Но, в стороне, у меня также есть вкладка "Y", открытая на переднем плане окна "B".

Если я проверю document.hidden для вкладки "Y" в это время будет разрешено false, что я и хочу. Однако, если я затем разверну окно "A" на весь экран и оставлю окно "B" открытым, а не свернутым, document.hidden для вкладки "Y" по-прежнему будет равно false хотя с точки зрения пользователя эта вкладка полностью невидима.

Добавление слушателей событий в blur и focus события тоже не помогают, потому что blurзапускается всякий раз, когда документ, в который он добавлен, теряет фокус, что нормально работает для сценария, когда у меня есть окно A, покрывающее весь экран, но не подходит для сценария, где у меня есть окна A и B рядом. В этом случае событие "размытие" будет срабатывать, когда вкладка "Y" теряет фокус, даже если вкладка "Y" технически видна всем, кто смотрит на экран.


Нужный мне результат выглядит так:

  1. Вкладка 'Y' находится на переднем плане не свернутого окна И не закрыта другим окном:increaseCount() // regardless of whether the tab is focused or not
  2. Вкладка 'Y' находится на переднем плане не свернутого окна, НО закрыта другим окном, так что его содержимое не будет видно любому человеку-наблюдателю:// don't increase count

Есть ли способ это обнаружить?

1 ответ

Решение

Нет, надежного способа обнаружить это не существует.

На самом деле, насколько я понимаю, Chrome может даже не знать, покрыт ли контент. Рассмотрим случай, подобный Windows, где, начиная с Windows Vista и Aero, окно приложения всегда отрисовывается и перехватывается оконным менеджером. Базовое приложение всегда обращается в виртуальное пространство. К другим сложностям относятся окна, которые могут закрывать окно браузера, но не блокировать его полностью. Не зная содержания, браузер на самом деле не знает, покрыто ли содержание.

Другие вопросы по тегам