Мое приложение меняет свое состояние, когда человек держит ключи-модификаторы (Shift, Alt, Ctrl). Я отслеживаю ключи-модификаторы с помощью событий keydown/keyup:
var altPressed;
window.onkeydown = window.onkeyup = function(e) {
altPressed = e.altKey;
}
События клавиатуры не запускаются за пределами вкладки браузера. Теперь представьте себе следующий сценарий:
- Удерживать клавишу Shift
- Нажмите ссылку на мое приложение, оно откроется в новом окне
- Кнопка Release Shift
keyup
Событие не будет срабатывать на моей странице, когда оно не будет сфокусировано, поэтому мое приложение покажет, когда я снова сосредоточусь на вкладке "Мои приложения", это покажет, что нажата клавиша Shift.
Было бы хорошо, если события видимости страницы имели свойства ключа-модификатора. Увы, они не делают.
document.addEventListener('webkitvisibilitychange', function(e) {
if (document.webkitHidden) return;
e.altKey // undefined :(
}, false);