Событие VisibilityChange не запускается при переключении программы/окна с помощью ALT+TAB или щелчка на панели задач.Html

Программисты Html
Ответить
Anonymous
 Событие VisibilityChange не запускается при переключении программы/окна с помощью ALT+TAB или щелчка на панели задач.

Сообщение Anonymous »

Проблема связана с поведением события "visibilitychange".

Оно срабатывает:
 – когда я переключаюсь на другую вкладку в окне браузера.
  • Когда я нажимаю кнопки свертывания/восстановления окна браузера.
(это нормально)

Оно не срабатывает:
- Когда я переключаюсь на другое окно/программу с помощью ALT+TAB.
  • Когда я переключаюсь на другое окно/программу, щелкая по панели задач.
(Это ДОЛЖНО срабатывать, потому что, как и при сворачивании, видимость окна может изменить)



Документация по API видимости страниц W3: http://www.w3.org/TR/page-visibility/

В спецификации нет определения «видимости страницы» относительно переключения программ ALT+TAB/. Я предполагаю, что это как-то связано между ОС и браузером.



ТЕСТИРОВАНО В
  • Браузеры:
    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, другие браузеры меня пока не волнуют.

Любая помощь или предложения?



ОБНОВЛЕНИЕ

Я пробовал использовать разные префиксы поставщиков для имени события (visibilitychange, webkitvisibilitychange, mozvisibilitychange, msvisibilitychange), но событие все равно не запускается, когда я переключаюсь на другую программу на панели задач или ALT+TAB, или даже если я открываю меню "Пуск" в Windows с помощью клавиши Windows, которая охватывает весь экран.

Я могу воспроизвести ту же самую проблему в Chrome, Firefox и Internet Explorer.

ОБНОВЛЕНИЕ №2

Вот обзорный пост, который я написал по этой проблеме, и обходной путь на чистом Javascript для решения возникших проблем.

ОБНОВЛЕНИЕ №3

Отредактировано, чтобы включить копию исходного сообщения блога. (см. принятый ответ)

Подробнее здесь: https://stackoverflow.com/questions/289 ... -with-altt
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»