#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.
Похоже, это не решает проблему для меня, но может помочь другим: