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

#javascript #asp.net #jquery-mobile #internet-explorer-9

#javascript #asp.net #jquery-mobile #internet-explorer-9

Вопрос:

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

Пример:

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

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

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

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

Редактировать: Кажется, это происходит не при каждой обратной передаче. Ответ выполняется при каждой обратной отправке.Перенаправление. Я должен добавить, что вся моя обратная отправка фактически использует ASP.NET AJAX, а не полные обратные отправки.

Комментарии:

1. PS: Я очень удивлен, что javascript может влиять на операционную систему Windows таким образом.

2. подключено ли ваше приложение в режиме отладки к VS?

3. Нет. Это происходит даже при выполнении на внешнем сервере.

4. Я могу воспроизвести это, но только когда в IE9 открыта только одна вкладка. Если вы откроете другую вкладку со случайным сайтом, эта ошибка не возникнет.

Ответ №1:

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

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

 $(document.activeElement).blur();
  

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

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

Комментарии:

1. Это имеет смысл, но у меня нет времени протестировать это должным образом, поскольку мы нашли другое обходное решение (рамка Chrome, хех) 🙂

Ответ №2:

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

 $(document.activeElement).blur();
  

и

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

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

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

Комментарии:

1. Хорошо написанный ответ и элегантное решение, сработало для меня, большое спасибо!

Ответ №3:

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

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

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

target.blur();

Для

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

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

Ответ №4:

Просто разместите эту ссылку для всех, кто сталкивается с продолжающимся беспорядком. Я вижу проблему в IE 9 и IE 10 в окне.location = ‘БЛА’, из ресурса Angular location.

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

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