Динамическая загрузка jQuery mobile приводит к минимизации IE - PullRequest
6 голосов
/ 23 августа 2011

Хорошо, это самая странная ошибка, с которой я когда-либо сталкивался. Это довольно просто, хотя. Если я загружаю jQuery, а затем jQuery mobile динамически в любой версии Internet Explorer, фактическое окно IE минимизирует . Это происходит во всех версиях IE через IETester, однако, если я запускаю полную версию в IE9, она запускает режим совместимости и по какой-то причине не минимизирует.

Я пробовал разные способы загрузки скриптов (прокомментировано в примере кода), и все они приводили к одинаковому поведению.

Почему это происходит? Есть ли способ обойти это?

http://jsfiddle.net/Xeon06/RCsuH/

Ответы [ 2 ]

3 голосов
/ 30 августа 2011

Это известная проблема в мобильном jQuery.Неправильная строка: jquery.mobile.navigation.js: 913 .

// Kill the keyboard.
// XXX_jblas: We need to stop crawling the entire document to kill focus. Instead,
//            we should be tracking focus with a live() handler so we already have
//            the element in hand at this point.
// Wrap this in a try/catch block since IE9 throw "Unspecified error" if document.activeElement
// is undefined when we are in an IFrame.
try {
    $( document.activeElement || "" ).add( "input:focus, textarea:focus, select:focus" ).blur();
} catch(e) {}

Есть вызов blur(), который отправляет окна IE в конец стека.

В качестве обходного пути вы можете избежать этого, поместив теги сценария физически в <head> HTML.

<!DOCTYPE HTML>
<html>
  <head>
    <link rel="stylesheet" href="http://code.jquery.com/mobile/latest/jquery.mobile.css" />
    <script src="http://code.jquery.com/jquery-1.6.2.js"></script>
    <script src="http://code.jquery.com/mobile/latest/jquery.mobile.js"></script>

...

Размещение тегов сценария в другом месте документа иливставка их через скрипт вызывает ошибку.

Эта скрипка демонстрирует обходной путь в действии.Обратите внимание, что это работает только в документе верхнего уровня .Если документ в <iframe>, ошибка все равно появится.Таким образом, если вы откроете редактор JSFiddle в IE 7/8, он все равно будет отправлен обратно;но если вы откроете только визуализированный HTML , он не будет.

1 голос
/ 27 августа 2011

Моя попытка "исправить" это: http://jsfiddle.net/RCsuH/6/

@ josh3736 был почти точно прав, где-то в коде он запускает document.body.blur(), что вызывает сворачивание окна.

Мое исправление просто заменяет эту функцию неактивной. Мне не удалось заставить теги сценария запускать onload, когда они закончили загрузку, поэтому замена функции (при необходимости) остается за вами.

Однако все это, похоже, ошибка в библиотеке jQuery Mobile, и поэтому вам, вероятно, следует подать отчет об ошибке вместе с ними. Тем не менее, я не уверен, что это будет их слишком беспокоить из-за ошибки в IE для платформы, предназначенной для мобильных телефонов / планшетов.

Примечание: это ужасный, ужасный код, который заменяет родные функции. Если это возможно, не используйте это.

...