Показать сообщение отдельно
  #2 (permalink)  
Старый 21.03.2016, 11:43
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от 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+ и в Хроме - в других не проверял, не стояла задача сделать полноценные рабочие коды, а только демонстрация идей.
Конечно, ситуация совершенно бредовая, но чисто теоретически...

Последний раз редактировалось Dilettante_Pro, 22.03.2016 в 10:06.
Ответить с цитированием