Сообщение от 12345678
|
Окей, тупой вопрос и ответ, скорее всего, "Нет". Можно ли сделать так, что бы на странице срабатывали события onkeydown, onkeyup и остальные подобные когда окно броузера (или его вкладка) не в фокусе?
|
Прежде всего, совершенно непонятно, зачем это может быть нужно?
Ответ на вопрос - и нет, и да.
Нет - потому что на вкладке не в фокусе события такого типа не могут произойти естественным образом.
Да - такие события можно сгенерировать.
Пример первый - генерация события через заданный интервал.
<!DOCTYPE html>
<html>
<head>
<title>First Page Interval</title>
<script>
var count = 0;
function changevalue(item) {
item.value = (count++).toString();
}
setInterval(function () {
var event = document.createEvent("Event");
event.initEvent("keydown", true, true);
var item = document.getElementById('test');
item.dispatchEvent(event);
}, 1000);
</script>
</head>
<body>
<input type="text" id="test" value = "" onkeydown="this.value = (count++).toString();"/>
</body>
</html>
Если этот пример открыть в первой вкладке - счетчик в инпуте будет обновляться с использованием генерируемого события keydown. Если открыть вторую вкладку и через некоторое время вернуться на первое - увидим, что счетчик нарастил значение.
Второй пример - генерация события в первой вкладке по событию во второй с использованием для передачи localStorage и события storage ( идея позаимствована у
Poznakomlus как засечь повторное открытие страницы? )
Код для первой вкладки
<!DOCTYPE html>
<html>
<head>
<title>First Page Listener</title>
<script>
var count = 0;
if (window.addEventListener) {
window.addEventListener("storage", handle_storage, false);
} else {
window.attachEvent("onstorage", handle_storage);
};
function handle_storage(e) {
if (!e) { e = window.event; }
var event = document.createEvent("Event");
event.initEvent("keydown", true, true);
var item = document.getElementById('test');
item.dispatchEvent(event);
};
</script>
</head>
<body>
<input type="text" id="test" value = "" onkeydown="this.value = (count++).toString();"/>
</body>
</html>
Код для второй вкладки
!DOCTYPE html>
<html>
<head>
<title>Secomd Page Send</title>
<script>
var count = 0;
function send_event() {
localStorage.setItem('event', (count++).toString());
}
</script>
</head>
<body>
<input type="button" value = "Send Event" onclick="send_event();"/>
</body>
</html>
Сразу предупреждаю, что коды работоспособны в IE9+ и в Хроме - в других не проверял, не стояла задача сделать полноценные рабочие коды, а только демонстрация идей.
Конечно, ситуация совершенно бредовая, но чисто теоретически...