Подтвердить что ты не робот

IE9 Window потеряет фокус из-за jQuery Mobile

В нашем продукте мы используем самую последнюю версию jQuery Mobile на нашем веб-сайте ASP.NET. Каждый раз, когда мы выполняем обратную передачу ASP.NET, окно браузера переходит в обратную сторону экрана.

Пример:

  • Разверните любое окно. Пример: визуальный Studio, Word, проводник Windows.
  • Увеличьте IE9 над ним. IE9 является единственным что вы видите на экране.
  • Нажмите на кнопку в нашем решении, которое делает обратная передача.
  • IE9 больше не отображается. Все, что было за этим, теперь сосредоточено (и заполняет экран, так как он максимизируется)

Обходные пути, которые я знаю:

  • Не включайте мобильные сценарии jQuery.
  • Убедитесь, что IE9 является единственным максимально развернутым окном в Windows.

Я не знаю, что делает jQuery Mobile в фоновом режиме, и я предполагаю, что это ошибка в IE9, которая в конечном итоге будет исправлена. Однако, если у вас есть какие-то советы о том, как предотвратить это, тем временем это будет здорово.

Изменить: Кажется, это не на каждой обратной передаче. Именно на каждой обратной передаче выполняется Response.Redirect. Я должен добавить, что все мои обратные передачи на самом деле используют ASP.NET AJAX, а не полные postbacks.

4b9b3361

Ответ 1

Я знаю, что это старый пост, но для людей, приезжающих сюда из Google:

Сегодня я столкнулся с этой проблемой. Похоже, что потерять фокусное поведение - это то, что делает IE, когда вы вызываете событие размытия на объекте окна. Это был код, который вызвал эту проблему для меня:

$(document.activeElement).blur();

activeElement будет по умолчанию для элемента body, когда в фокусе нет других элементов, а затем размывается событие blur до окна. Чтобы исправить это, я просто сделал проверку:

if (document.activeElement != $('body')[0]) {
    $(document.activeElement).blur();
}

Ответ 2

У меня была аналогичная проблема с IE10 и jQuery 1.7.2. Я нашел эти строки в своем коде:

$(document.activeElement).blur();

и

$(':focus').blur();

Итак, добавление простого .not('body') решает проблему:

$(document.activeElement).not('body').blur();
$(':focus').not('body').blur();

Ответ 3

Эта же проблема возникает с jQuery Mobile 1.4.2.

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

Чтобы исправить это, вам нужно отредактировать функцию _handleDocumentFocusIn. Вам нужно изменить строку (10391), которая гласит:

target.blur();

к

if (targetElement.nodeName.toLowerCase() !== "body")
{
    target.blur();
}

Я сделал запрос на растяжение, поэтому, надеюсь, это будет включено в следующую версию.

Ответ 4

Просто отправьте эту ссылку любому, кто испытывает больше этого продолжающегося беспорядка. Я вижу проблему с IE 9 и IE 10 на window.location = 'BLAH', из ресурса местоположения Angular.

Это не похоже на решение проблемы для меня, но это может помочь другим:

http://support.microsoft.com/kb/2600156/en-us