События window.onfocus и window.onblur в ИЕ
Сделал очень простое приложение, работающее ивентами нажатия на клавиши. Известно, что события будут работать только когда окно браузера находится в фокусе. Для того чтоб пользователю было понятно, находится ли окно в фокусе, я просто меняю фон боди:
window.onfocus = function(){ alert('focus'); document.body.style.backgroundColor = '#fff'; } window.onblur = function(){ alert('blur'); document.body.style.backgroundColor = '#ccc'; }В рабочем скрипте алертов конечно же нету. Скрипт работает прекрасно везде, кроме ИЕ. В нормальных браузерах при потере фокуса выдается сообщение 'blur', при получении фокуса выдается 'focus' (К.О.). ИЕ 8 при потере фокуса ничегошеньки не показывает, но при получении выдаются оба сообщения в таком порядке: 'focus', 'blur' (и цвет боди остается серым). Что за №;"!*? |
Цитата:
из-за алертов, в нормальных браузерах скрипт не работает нормально и, в ИЕ, он без алертов работает правильно. укажите для начала хотя бы версию ИЕ |
Алертов еще не было, проблема уже существовала. Для убедительности снова убрал алерты, та же фигня.
Цитата:
|
Цитата:
завтра проверю IE8 под Win7 |
Цитата:
|
проверил
все отлично работает, если закоментировать alert-ы |
FINoM,
у меня возникала проблема с key событиями в IE, в IE (только на 8 проверял) они вешаются не на window, а на window.document, прошу прощения если выступил в роли К.О. Просто подумал что вы проверяете на клавишах, может по этому не получается. Интересная идея, если вы так реализовываете отлючение управления, я обработчики удалял UPD IE8 под Win7 у меня тоже не работает даже без алертов, абсолютно такая же ситуация, но если просто вызывать при загрузке window.focus() то все срабатывает нормально |
Цитата:
|
FINoM,
Ваша страничка также не работает у меня под win7x64 HP ie8, автоматические обновления, уж не знаю что еще может внести отличия в эти ie Заодно расскажу какое я провел наблюдение. И при упоминании IE имеется ввиду мой IE8 (раз, как выяснилось, работает отлично от вашего:blink: ) А возможно, и не только IE, вдруг у меня с системой что-то. При загрузке страницы файрфокс и IE автоматом делают window.focus(), если самому позвать window.focus(), хром, сафари и опера все равно не сделают. IE при блуре ничего не делает, но при фокусе делает фокус и тут же блур, но не всегда, когда раз 10 тыкнешь в окно, на рабочий стол, в окно и т.д., то начинает работать нормально :blink: Сафари при фокусе делает фокус 2 раза. Если в обработчиках onfocus и onbur вызывать window.focus() и window.blur() соответственно, первой строкой кода, то происходят вообще странные вещи, хотя и код будет выглядеть не менее странно. В файрфоксе, опере, хроме и сафари все работает так же, в IE эта строка выполняется, но судя по результату, после того как произойдет то, что он делает без этой строки, то бишь при фокусе произойдет фокус-блур-фокус, при блуре наоборот. Если нужно только менять стили, то можно так сделать, во всех этих браузерах выглядит правильно, но если нужно что то кроме этого делать, то естественно не подходит, т.к. обработчики выполняются по несколько раз в некоторых случаях Тестировал на этом <!DOCTYPE html> <script type ="text/javascript"> window.onload = function(){ var i = 0; var blurc = document.getElementById("blurc"); var focusc = document.getElementById("focusc"); //var win = window/* @cc_on.document */; //var body = document.documentElement || document.body; window.onblur = function(){ //window.blur(); document.body.style.backgroundColor = "red"; blurc.innerHTML += "был blur"+ ++i +"!<br />"; return false; } window.onfocus = function(){ //window.focus(); document.body.style.backgroundColor = "green"; focusc.innerHTML += "был focus"+ ++i +"!<br />"; return false; } //window.focus(); } </script> <style type = "text/css"> .col{ display: inline-block; vertical-align: top; } </style> <div class = "col" id = "focusc"></div> <div class = "col" id = "blurc"></div> Возможно я тут ошибку допустил, конечно. |
Цитата:
вывод: проблема в другом |
Часовой пояс GMT +3, время: 14:40. |