Как определить, что popup расширения закрыт в Chrome?
window.onclose не помогает.
Когда нажимаешь на кнопку расширения, создаётся окно. А потом, когда оно закрывается, ссылка на него остаётся! Ссылки на функции в нём остаются и вызываются без проблем из фоновой страницы! События внутри popup (в том числе setInterval) остаются и срабатывают!
(В FireFox в этом плане проще - там popup сразу умирает и все ссылки становятся "dead" и вызывают ошибку при использовании).
Как понять, что popup скрыт? Проблема только в Chrome.
Если вам требуется хранить ссылку на popup, то в архитектуре вашего расширения печалька.
Используйте chrome.runtime.onMessage / chrome.runtime.sendMessage
либо https://developer.mozilla.org/en-US/docs/Web/API/B...
Дело не в том, что ссылки на popup сохраняются (а они-таки сохраняются и работают).
Проблема в том, что после закрытия popup он остаётся живой и в нём срабатывают различные события и т.д.
В архитектуре моего приложения заложено, что если popup закрыт, то информацию в нём обновлять не нужно, чтобы не нагружать внешние сервисы. А если открыт, то ловятся все события. В частности, происходят асинхронные запросы в Интернет в зависимости от ситуации - и живая подгрузка данных для отображения пользователю.
Сейчас пока сделал костыль - обновляю "тяжелую" информацию только один раз в момент открытия popup (это я отследить умею). А про момент закрытия так ничего и не знаю. Нет способов определить, активен ли в данный момент popup. С точки зрения скриптов он активен и доступен.
А если открыт, то ловятся все события. В частности, происходят асинхронные запросы в Интернет в зависимости от ситуации - и живая подгрузка данных для отображения пользователю.
Это и называется печалька.
Попап должен быть всего лишь вьюшкой для данных.
Вся бизнес логика, сетевые запросы и т. д. должны быть в фоне. По крайней мере на мой взгляд.