onkeydown когда окно/вкладка не в фокусе
Окей, тупой вопрос и ответ, скорее всего, "Нет". Можно ли сделать так, что бы на странице срабатывали события 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 http://javascript.ru/forum/events/61...-stranicy.html ) Код для первой вкладки <!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+ и в Хроме - в других не проверял, не стояла задача сделать полноценные рабочие коды, а только демонстрация идей. Конечно, ситуация совершенно бредовая, но чисто теоретически... |
Часовой пояс GMT +3, время: 06:36. |