Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.03.2011, 01:24
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

События 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' (и цвет боди остается серым). Что за №;"!*?
Ответить с цитированием
  #2 (permalink)  
Старый 10.03.2011, 01:35
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от FINoM
В рабочем скрипте алертов конечно же нету.
ну, так уберите их.
из-за алертов, в нормальных браузерах скрипт не работает нормально
и, в ИЕ, он без алертов работает правильно.
укажите для начала хотя бы версию ИЕ
Ответить с цитированием
  #3 (permalink)  
Старый 10.03.2011, 02:50
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Алертов еще не было, проблема уже существовала. Для убедительности снова убрал алерты, та же фигня.
Сообщение от Gvozd
укажите для начала хотя бы версию ИЕ
IE8 под Win7
Ответить с цитированием
  #4 (permalink)  
Старый 10.03.2011, 02:56
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от FINoM
IE8 под Win7
IE8 под XP работает нормально
завтра проверю IE8 под Win7
Ответить с цитированием
  #5 (permalink)  
Старый 10.03.2011, 03:21
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Gvozd
завтра проверю IE8 под Win7
Ок, спасибо.
Ответить с цитированием
  #6 (permalink)  
Старый 10.03.2011, 21:43
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

проверил
все отлично работает, если закоментировать alert-ы
Ответить с цитированием
  #7 (permalink)  
Старый 11.03.2011, 00:29
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

FINoM,
у меня возникала проблема с key событиями в IE, в IE (только на 8 проверял) они вешаются не на window, а на window.document, прошу прощения если выступил в роли К.О. Просто подумал что вы проверяете на клавишах, может по этому не получается.
Интересная идея, если вы так реализовываете отлючение управления, я обработчики удалял

UPD IE8 под Win7 у меня тоже не работает даже без алертов, абсолютно такая же ситуация, но если просто вызывать при загрузке window.focus() то все срабатывает нормально
__________________
readOnly

Последний раз редактировалось poorking, 11.03.2011 в 01:10.
Ответить с цитированием
  #8 (permalink)  
Старый 11.03.2011, 01:25
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Gvozd
все отлично работает, если закоментировать alert-ы
Проверь плиз здесь: http://dev.odessite.com.ua/ag/stopwatch/
Ответить с цитированием
  #9 (permalink)  
Старый 11.03.2011, 02:44
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

FINoM,
Ваша страничка также не работает у меня под win7x64 HP ie8, автоматические обновления, уж не знаю что еще может внести отличия в эти ie


Заодно расскажу какое я провел наблюдение.
И при упоминании IE имеется ввиду мой IE8 (раз, как выяснилось, работает отлично от вашего ) А возможно, и не только IE, вдруг у меня с системой что-то.

При загрузке страницы файрфокс и IE автоматом делают window.focus(), если самому позвать window.focus(), хром, сафари и опера все равно не сделают.

IE при блуре ничего не делает, но при фокусе делает фокус и тут же блур, но не всегда, когда раз 10 тыкнешь в окно, на рабочий стол, в окно и т.д., то начинает работать нормально

Сафари при фокусе делает фокус 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>

Возможно я тут ошибку допустил, конечно.
__________________
readOnly

Последний раз редактировалось poorking, 11.03.2011 в 03:14.
Ответить с цитированием
  #10 (permalink)  
Старый 11.03.2011, 04:01
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от FINoM
Проверь плиз здесь: http://dev.odessite.com.ua/ag/stopwatch/
а эта ссылка у меня не пашет как надо, и под XP
вывод: проблема в другом
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JW Player - не работают события atomix Элементы интерфейса 0 29.11.2010 14:56
Обработка события элемента внутри создавшего его объекта pauluss Общие вопросы Javascript 10 10.09.2010 17:01
как узнать имеется ли обработчик события HelpeR Events/DOM/Window 9 17.02.2010 18:20
Drug&Drop + всплывание события = проблемы =(( _NoName_ Events/DOM/Window 4 05.03.2009 17:47
Явный вызов процедуры обработки события. supchik Общие вопросы Javascript 18 27.01.2009 13:16