2011-04-14 16 views
12

En nuestro producto, estamos utilizando la versión de desarrollo más reciente de jQuery Mobile en nuestro sitio web ASP.NET. Cada vez que hacemos una devolución de datos de ASP.NET, la ventana del navegador va a la parte posterior de la pantalla.Ventana IE9 pierde enfoque debido a jQuery Mobile

Ejemplo:

  • maximizar cualquier ventana. Ejemplo: Visual Studio, Word, Windows Explorer.
  • Maximiza IE9 sobre él. IE9 es lo único que ve en la pantalla.
  • Haga clic en un botón en nuestra solución que hace una devolución de datos.
  • IE9 ya no está visible. Lo que estaba detrás de él ahora tiene el foco (y llena la pantalla, ya que es maximizado)

Sólo las soluciones que conozco:

  • no incluyen los scripts jQuery móviles.
  • Asegúrese de que IE9 sea la única ventana maximizada en Windows.

No sé qué hace jQuery Mobile en segundo plano y supongo que esto es un error en IE9 que eventualmente se solucionará. Sin embargo, si tuviera algún consejo sobre cómo evitar que ocurra mientras tanto, sería genial.

Editar: Parece que no está en cada devolución. Está en cada devolución de datos que realiza un Response.Redirect. Debo añadir que toda mi devolución de datos en realidad está utilizando ASP.NET AJAX, no devoluciones completas.

+5

PS: Estoy muy sorprendido de que JavaScript puede afectar a las ventanas del sistema operativo de esta manera. –

+0

¿tiene su aplicación en modo de depuración adjunta a VS? –

+0

No. Incluso lo hace cuando se realiza en un servidor externo. –

Respuesta

16

Sé que esto es una entrada antigua, pero para las personas que vienen aquí desde Google:

me encontré con este mismo problema hoy en día. Parece que este comportamiento de pérdida de foco es lo que IE hace cuando desencadena el evento de desenfoque en el objeto de ventana. Este fue el código que causó este problema para mí:

$(document.activeElement).blur(); 

activeElement mostrará un mensaje en el elemento del cuerpo cuando no hay otros elementos en el enfoque y desenfoque del evento y luego se propaga hacia arriba de la ventana. Para solucionar esto simplemente hice una comprobación como:

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

Esto tiene sentido, pero no tengo tiempo para probarlo correctamente, ya que encontramos otra solución (Chrome Frame, heh) :) –

10

Tuve un problema similar con IE10 y jQuery 1.7.2. me encontré con estas líneas en mi código:

$(document.activeElement).blur(); 

y

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

Por lo tanto, la adición de .no sencilla ('cuerpo') resuelve el problema:

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

Respuesta bien escrita y una solución elegante, funcionó para mí, muchas gracias! – 4imble

0

Este mismo problema parece ocurrir con jQuery Mobile 1.4.2.

Al usar IE 10, con una sola pestaña abierta y otra ventana en el mismo monitor, si abre una ventana emergente enviará el navegador al fondo.

Para solucionar esto, debe editar la función _handleDocumentFocusIn. Es necesario cambiar la línea (10391) que lee:

target.blur();

a

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

hice una solicitud de extracción y espero que esto se incluirá en la próxima versión.

0

Simplemente publicando este enlace a cualquiera que esté experimentando más de este desorden continuo. Estoy viendo el problema en IE 9 e IE 10 en una ventana.location = 'BLAH', desde dentro del recurso de ubicación angular.

Esto no parece resolver el problema para mí, pero puede ayudar a los demás:

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