window.onfocus не работает в IE7, несовместимо в Opera - PullRequest
6 голосов
/ 17 сентября 2010

Обратите внимание, что это относится к событиям фокусировки и размытия в окне, а не в полях формы.

Я загружаю документ во всплывающем окне, и он содержит следующий код:

<script type="text/javascript">
window.onblur = function(){ document.title="BLURRED"; }
window.onfocus= function(){ document.title="FOCUSED"; }
</script>

Эти функции являются временными для тестирования. Я надеялся использовать эти события, чтобы установить флаг, указывающий состояние окна; Я работаю с приложением чата, и если сообщения приходят, когда оно свернуто, я сделаю некоторые изменения в названии. Если они не отменят, когда окно будет в фокусе, они просто будут раздражать.

Onload, я также поместил фокус в текстовую область. (Не уверен, что это имеет какое-либо значение.)

IE7 (у меня нет другой удобной версии), похоже, распознает window.onblur, но не window.onfocus. Opera 10 просто странная.

Вот что происходит в моих браузерах. Я запускаю всплывающее окно, нажимая на ссылку в родительском окне, затем прохожу несколько циклов минимизации-восстановления, нажимая кнопку всплывающего окна на панели задач (Windows XP):

Safari 4:

  • Открыть окно: документ открывается с оригинальным заголовком
  • Свернуть: заголовок меняется на "BLURRED"
  • Восстановление: название изменяется на «FOCUSED»

Это то, что я ожидал.

Firefox 3.5:

  • Открыть окно: документ открывается с оригинальным заголовком, затем изменяется на «ФОКУСИРОВАННЫЙ»
  • Свернуть: заголовок меняется на "BLURRED"
  • Восстановление: название изменяется на «FOCUSED»

Onfocus onload немного удивительно, но не проблема.

IE7:

  • Открыть окно: документ открывается с оригинальным заголовком
  • Свернуть: заголовок меняется на "BLURRED"
  • Восстановление: Название не меняется, независимо от того, сколько раз я переключаю

Что случилось с onfocus?

Опера 10,5

  • Открыть окно: документ открывается с оригинальным заголовком, но не на другой вкладке, а на другой вкладке

Иногда ...

  • Свернуть: заголовок меняется на "BLURRED"
  • Восстановление: название изменяется на «FOCUSED»

Иногда ...

  • Свернуть: заголовок меняется на «BLURRED», затем «FOCUSED»
  • Восстановление: название не изменяется

Хорошо, это просто странно ...

Я открыт для других подходов, но мне бы очень хотелось понять, что здесь происходит, в простом старом Javascript - поэтому пожалуйста, не давайте jQuery ответ , если на самом деле нет другого способ обойти это.

Спасибо!

1 Ответ

6 голосов
/ 19 сентября 2010

onfocus и onblur содержат ошибки в объекте окна в IE. Альтернатива - использовать распространяющиеся события onfocusin и onfocusout :

function focusin() { document.title="BLURRED"; }
function focusout() { document.title="FOCUSED"; }

if ("onfocusin" in document)
    document.onfocusin = focusin,
    document.onfocusout = focusout;
else
    window.onblur = focousout,
    window.onfocus= focusin;

Я создал для вас пример здесь .

focusin и focusout , в отличие от focus и blur , являются распространяющимися событиями; они будут стрелять по элементам на странице и пузыриться вверх. Вам нужно будет проверить event.srcElement или event.target , если вы не хотите воздействовать на это событие для всех элементов на странице.

Что касается Opera, «странное» - это одно слово, которое вы можете использовать. Версия на моей машине не будет запускать события размытия или фокусировки на окне для меня. Надеюсь, кто-то еще может предложить вам решение для этого.

...