Окно IE9 теряет фокус из-за jQuery Mobile - PullRequest
12 голосов
/ 14 апреля 2011

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

Пример:

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

Только известные мне обходные пути:

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

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

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

Ответы [ 4 ]

16 голосов
/ 28 августа 2012

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

Я столкнулся с этой же проблемой сегодня. Кажется, именно это поведение потери фокуса делает IE, когда вы запускаете событие размытия на объекте window. Это был код, который вызвал эту проблему для меня:

$(document.activeElement).blur();

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

if (document.activeElement != $('body')[0]) {
    $(document.activeElement).blur();
}
10 голосов
/ 14 июня 2013

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

$(document.activeElement).blur();

и

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

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

$(document.activeElement).not('body').blur();
$(':focus').not('body').blur();
0 голосов
/ 08 сентября 2014

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

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

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

0 голосов
/ 04 апреля 2014

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

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

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

target.blur();

до

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

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

...