Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Объясните пожалуйста что происходит с фокусом в Chrome? (https://javascript.ru/forum/events/57359-obyasnite-pozhalujjsta-chto-proiskhodit-s-fokusom-v-chrome.html)

Momon 31.07.2015 11:16

Объясните пожалуйста что происходит с фокусом в Chrome?
 
window.onfocus = function() {
 document.getElementById("input").focus();
}
document.getElementById("input").onfocus = function() {
  console.log("Сработал обработчик фокуса на поле");
}

В FF обработчик фокуса на поле срабатывает 1 раз при фокусировке на окне.
В Chrome обработчик фокуса на поле срабатывает 2 раза при фокусировке на окне (при переходе с др. окна или вкладки).

Чтобы увидеть эффект нужно открыть https://jsfiddle.net/6bnspf5q/1/ потом кликнуть в пустое место рядом с полем (в окошке result), потом перейти на другую вкладку или в другое окно, потом вернуться и обработчик фокуса на поле сработает 2 раза!

Версия №1
Сначала фокусировка на окне вызывает фокус на поле, после чего срабатывает обработчик фокусировки на поле и выводит сообщение. А потом ещё раз срабатывает обработчик фокусировки на поле, но уже как бы по настоящему! :blink:

Версия №2
После срабатывания моего кода, Chrome по своей инициативе в наглую подставляет фокус куда ему взбрендилось.

Deff 31.07.2015 14:58

var  timerID;
window.onfocus = function() {
 clearTimeout(timerID);
 timerID = setTimeout(function() {document.getElementById("input").focus();},100);
}
document.getElementById("input").onfocus = function() {

  console.log("Сработал обработчик фокуса на поле");
}

Momon 31.07.2015 15:09

Deff,
Спасибо за помощь, но не мог бы ты пояснить что происходит? С таймером работает как надо, но в чём проблема то была?

Deff 31.07.2015 23:09

Momon,
Есть иное свойство:

if ('visibilityState' in document) {
    alert ('Да поддерживает!');
    alert('status вкладки: ' + document.visibilityState)
}

Deff 31.07.2015 23:14

Цитата:

Сообщение от Momon
Спасибо за помощь, но не мог бы ты пояснить что происходит?

Ну подобная фишка называется "Дребезг контактов", ранее была медвежуть в Firefox при onresize и onscroll - затем пофиксили. При однократном действии события срабатывали до десятка раз. Потом пофиксили. Наверное в этот момент выполнялось много дополнительных действий, которые прерывали обработку события

Momon 01.08.2015 09:14

Deff,
Спасибо за объяснение.


Часовой пояс GMT +3, время: 05:49.