Подтвердить что ты не робот

Событие visibilitychange не запускается при переключении программы/окна с ALT + TAB или нажатием на панели задач

В основном проблема связана с поведением события "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 для решения возникших проблем.

4b9b3361

Ответ 1

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

Ответ 2

Там очень простое решение, с которым я столкнулся.

Вам просто нужно передать false в useCapture, при этом в документ будет добавлен прослушиватель событий. Работает как шарм!

 document.addEventListener('visibilitychange', function () {
  // code goes here
}, false)

Ответ 3

Предлагаемое рабочее решение предлагается здесь: fooobar.com/info/15440/.... Он использует комбинацию API видимости страниц W3C, размытие/фокус и движения мыши. Скрытые HTML-страницы, связанные с Alt + Tab, идентифицируются вероятностным способом (т.е. Вы не можете определить, скрыта ли ваша страница со 100-процентной точностью).