6

De acuerdo, este es de lejos el error más extraño que he encontrado. Es bastante sencillo sin embargo. Si cargo jQuery y luego jQuery mobile dinámicamente en cualquier versión de Internet Explorer, la ventana IE actual minimiza. Esto sucede en todas las versiones de IE a través de IETester, sin embargo, si ejecuto la versión completa en IE9, activa el modo de compatibilidad y, por alguna razón, no minimiza.Cargar dinámicamente el móvil jQuery hace que IE minimice

He intentado varias formas de cargar los scripts (comentados en el código de ejemplo), todo lo cual resulta en el mismo comportamiento.

¿Por qué sucede esto? ¿Hay alguna forma de evitarlo?

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

+0

Puedo confirmar que veo esto en IE 7 en una máquina virtual sin formato. Específicamente, la ventana no está * minimizada * - se envía al final de la pila (minimice otras ventanas y verá que su ventana de IE aún está abierta), que se siente como 'window.blur()' siendo llamado en alguna parte. (En mi IE 9, no minimiza/desenfoca ni entra en modo compatibilidad.) – josh3736

Respuesta

3

Esto es known issue en jQuery móvil. La línea ofensiva es 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) {} 

Ahí está la llamada a blur() que está enviando las ventanas de IE a la parte posterior de la pila. Como solución alternativa, puede evitar esto colocando las etiquetas de secuencia de comandos físicamente en el <head> del 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> 

... 

Colocar las etiquetas de secuencia de comandos en otra parte del documento o insertarlas mediante una secuencia de comandos desencadena el error.

This Fiddle demuestra la solución en la acción. Tenga en cuenta que esto solo funciona en un documento de nivel superior . Si el documento está en un , el error seguirá apareciendo. Por lo tanto, si abre el editor JSFiddle en IE 7/8, se enviará a la parte posterior; pero si abre solo el rendered HTML, no lo hará.

1

Mi intento de "fijación" que: http://jsfiddle.net/RCsuH/6/

@ josh3736 era casi exactamente a la derecha, en alguna parte del código que está disparando un document.body.blur() que provoca la reducción al mínimo de la ventana.

Mi solución simplemente reemplaza esa función con una función no operativa. No pude hacer que las etiquetas del script activaran una carga cuando terminaron de cargarse, por lo que reemplazar la función (si es necesario) queda en tus manos.

Sin embargo, todo esto parece ser un error en la biblioteca jQuery Mobile, y por lo tanto, probablemente deba presentar un informe de error con ellos. Sin embargo, no estoy seguro de que les molestará demasiado que exista un error en IE para un marco diseñado para teléfonos celulares/tabletas.

Nota: Este es un código horrible, horrible que reemplaza las funciones nativas. Si es posible, no use esto.

+0

* "No estoy seguro de que les molestará demasiado que exista un error en IE para un marco diseñado para teléfonos celulares/tabletas . "* IE * está * en teléfonos celulares/tabletas, y con las nuevas tabletas de Windows 8 que vienen, será IE9/10.Mi sitio permite que los usuarios creen páginas móviles, y la * vista previa * para eso usa la página HTML/CSS/JS real de su página móvil (esta es una buena idea por razones obvias, a la derecha). Se rompe en IE9. – Mud

Cuestiones relacionadas