2012-06-27 22 views
6

Tengo una página web ASP.Net que actualmente funciona en el iOS4 pero no en el iOS5.JavaScript setTimeout no se activa después de Window.Open

En la página web principal tengo un botón que abre una ventana secundaria. Y hago una cosa de actualización de setTimeout en la ventana principal justo después de la llamada a la ventana abierta.

Noté en el iPhone iOS5 que cuando abre la ventana secundaria, no se llama a la función setTimeout en la página principal hasta que vuelva a la ventana principal y vuelva a la ventana secundaria para ver la actualización.

He aquí un fragmento de mi código en la página principal y en el que creo es el problema

WindowManager.OpenWindow('...') 
t = setTimeout(function() { handles[0].testfx(); }, 1000); 

este se ejecuta en iOS4, pero no en iOS5.

¿Alguna idea?

+3

Sin detalles sobre CÓMO actualizar, no creo que nadie pueda ayudar. –

+2

Tal vez el ISO5 es detener la ejecución de javascript cuando la página está en el fondo para guardar las baterías o algo similar. – Aristos

Respuesta

3

iOS5 detiene efectivamente JavaScript cuando una ventana no es la ventana activa. No hay nada que pueda hacer al respecto, así que lo mejor que puede hacer es tratar de modificar su configuración para que JavaScript no necesite ejecutarse cuando su ventana esté en segundo plano.

Dijiste que estás haciendo un setTimeout refresh thing in the parent window. ¿Por qué estás haciendo esto? Francamente, suena un poco extraño: ¿por qué quieres refrescar algo cuando el usuario ni siquiera puede ver tu página? ¿Qué es exactamente lo que hace la línea handles[0].testfx(); por usted?

+1

Puede haber muchas razones para continuar el proceso de JS mientras la ventana no está activa. Por encima de todo, uno podría mantener vivo algún tipo de conexión a un servidor durante un período corto, de modo que el usuario no siempre tenga que restablecer las conexiones o credenciales cuando vuelva a la página. –

+0

Creo que Chrome está haciendo algo similar, sería útil investigar esto. – Guillaume86

2

Esto es sólo una sugerencia, ya que no tengo acceso para probar esto, pero es posible que pueda hackear esto usando window.postMessage. Un ejemplo de esto se puede encontrar here.

En su caso, es probable que desee comprobar si ha transcurrido un tiempo requerido, y si no, llame de nuevo al window.postMessage, de lo contrario, llame a su controlador.

No estoy seguro de qué tan rápido las llamadas a window.postMessage se procesarán, si es que lo hacen, cuando no estén en la ventana activa.

Cuestiones relacionadas