Ответ 1
Вот столбец, который я написал для этой проблемы, и обходной путь в чистом javascript для решения возникающих проблем.
В основном проблема связана с поведением события "visibilitychange".
Это вызвало: - когда я переключаюсь на другую вкладку внутри окна браузера
(это нормально)
Не запускается: - когда я переключаюсь на другое окно/программу, используя ALT + TAB
(этот ДОЛЖЕН запускаться, потому что, как и при минимизации, видимость окна может измениться)
Документация API видимости страницы W3: http://www.w3.org/TR/page-visibility/
В спецификации нет определения "видимости страницы" относительно переключения ALT + TAB/программы. Я предполагаю, что ему есть что-то делать между ОС и браузером.
Есть ли способ обхода этого исправления? Реализация довольно проста, я слушаю событие "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, который охватывает весь экран.
Я могу воспроизвести ту же самую проблему в Chrome, Firefox и Internet Explorer.
Вот столбец, который я написал для этой проблемы, и обходной путь в чистом javascript для решения возникших проблем.
Вот столбец, который я написал для этой проблемы, и обходной путь в чистом javascript для решения возникающих проблем.
Там очень простое решение, с которым я столкнулся.
Вам просто нужно передать false в useCapture, при этом в документ будет добавлен прослушиватель событий. Работает как шарм!
document.addEventListener('visibilitychange', function () {
// code goes here
}, false)
Предлагаемое рабочее решение предлагается здесь: fooobar.com/info/15440/.... Он использует комбинацию API видимости страниц W3C, размытие/фокус и движения мыши. Скрытые HTML-страницы, связанные с Alt + Tab, идентифицируются вероятностным способом (т.е. Вы не можете определить, скрыта ли ваша страница со 100-процентной точностью).