В основном проблема связана с поведением события "visibilitychange".
Это вызвало: - когда я переключаюсь на другую вкладку внутри окна браузера
- когда я нажимаю кнопки "Свернуть/восстановить" для окна браузера.
(это нормально)
Не запускается: - когда я переключаюсь на другое окно/программу, используя ALT + TAB
- когда я переключаюсь на другое окно/программу, нажимая на панель задач
(этот ДОЛЖЕН запускаться, потому что, как и при минимизации, видимость окна может измениться)
Документация API видимости страницы W3: http://www.w3.org/TR/page-visibility/
В спецификации нет определения "видимости страницы" относительно переключения ALT + TAB/программы. Я предполагаю, что ему есть что-то делать между ОС и браузером.
ИСПЫТАНИЕ IN
- Браузеры: Chrome 40.0.2214.115 m/Firefox 36.0.1/Internet Explorer 11.0.9600.17107
- ОС: Windows 8.1
Есть ли способ обхода этого исправления? Реализация довольно проста, я слушаю событие "visibilitychange", используя jQuery, а затем в своем обратном вызове проверяю значение "document.visibilityState", но проблема в том, что событие не срабатывает, когда ожидается.
$(document).on('visibilitychange', function() {
if(document.visibilityState == 'hidden') {
// page is hidden
} else {
// page is visible
}
});
Это можно сделать и без jQuery, но ALT + TAB и переключатель панели задач скрывают/показывают ожидаемое поведение:
if(document.addEventListener){
document.addEventListener("visibilitychange", function() {
// check for page visibility
});
}
Я также пробовал модуль ifvisible.js(https://github.com/serkanyersen/ifvisible.js), но поведение одного и того же.
ifvisible.on('blur', function() {
// page is hidden
});
ifvisible.on('focus', function() {
// page is visible
});
Я не тестировал в других браузерах, потому что, если я не могу заставить его работать в Chrome на Windows, я действительно не забочусь о других браузерах.
Любая помощь или предложение заблаговременно благодарят.
UPDATE
Я попытался использовать разные префиксы поставщика для имени события (visibilitychange, webkitvisibilitychange, mozvisibilitychange, msvisibilitychange), но все же событие не запускается, когда я переключаюсь на другую программу на панели задач или ALT + TAB, или даже если я открываю начало меню в окнах с ключом Windows, который охватывает весь экран.
Я могу воспроизвести ту же самую проблему в Chrome, Firefox и Internet Explorer.
ОБНОВЛЕНИЕ # 2
Вот столбец, который я написал для этой проблемы, и обходной путь в чистом javascript для решения возникших проблем.