2008-11-17 7 views
8

Estoy desarrollando un sitio que hace un uso extensivo de JavaScript (jQuery). Recibo regularmente el IE '¿Detener la ejecución de este script? cuadro de diálogo de error cuando intento cerrar el navegador."¿Deja de ejecutar este script?" error

Supongo que el problema se produce porque el sitio es una sola página que utiliza AJAX, por lo que no hay devoluciones de datos para restablecer la cuenta de comandos ejecutados de IE.

La piratería del registro del lado del cliente no es una opción.

¿Alguien sabe una forma de evitar este error?

ACTUALIZACIÓN: La página tiene un número (~ 10) temporizadores de intervalo que sondean continuamente en intervalos de 30 o 60 segundos.

+0

Es posible que desee ver las respuestas publicadas para la pregunta "[un script en esta página está causando, es decir, ejecutar lentamente] (http://stackoverflow.com/questions/212550/a-script-on-this- page-is-causing-ie-to-run-slowly) ". –

Respuesta

3

¿Por casualidad utiliza un controlador window.onunload? Si lo haces, podrías verificar que no tienes un bucle infinito allí.

Para comprobar, en la parte inferior de su Javascript a hacer:

window.onunload = null; 

y probar de nuevo.

+0

esto no es el problema en mi caso. Simplemente estaba ejecutando un largo guión en una página. – liammclennan

+0

@liammclennan Entonces, tenías un script que siempre se estaba ejecutando (o casi siempre), pero solo al cerrar la pestaña ¿apareció una alerta? –

1

Usted acaba de tener algún script de larga duración/ciclo infinito en su código. Más detalles pueden obtener una respuesta más precisa.

Si su página utiliza muchos intervalos, querrá cancelarlos antes de salir de la página. Use window.onunload para borrar todos los intervalos.

4

También me he enfrentado a este problema y había superado este problema dividiendo el ejecutio continuo de DOM. Para este enfoque, utilicé la función setTimeout. Resolver este problema depende completamente de cómo está dividiendo la ejecución continua.

+0

setTimeout es el camino a seguir. Probado en IE8 y con grandes conjuntos de datos AJAX de más de 5.000 elementos. –

1

I just blogged about this y pongo lo que creo que es una solución muy elegante. Entonces mira. Como mencioné anteriormente, mi solución simplemente divide las operaciones de larga ejecución en partes, pero proporciono una buena clase de utilidad para hacer esto.

+0

su solución es interesante. No lo he probado, pero si funciona, es tremendamente útil. – liammclennan

0

También puede considerar dividir la operación de largo en $ (document) ready() y $ (ventana) .load()

0

solo tuve un problema con los selectores de jQuery que eran demasiado generales: por ejemplo, $("*")

2

Problema: “detener la ejecución de este script?” Error

Solución: Se puede decir que esto un problema de compatibilidad o de un fallo ya que la misma materia se ejecuta sin ningún error en Mozilla pero se ejecuta en IE 6,7 o 8 con un mensaje de error "Deje de ejecutar este script". Microsoft ha proporcionado un parche para solucionar este problema en IE. Así que, por favor vaya al siguiente enlace y descargue el "Microsoft Fix It" e instalar el mismo y reiniciar el navegador y que nunca se verá el "detener la ejecución de este script" error: http://support.microsoft.com/kb/175500#FixItForMeAlways

+5

Esto no es realmente una solución. Los usuarios no deberían tener que instalar un parche solo para ver un determinado sitio web en su navegador. Algunas llamadas 'setTimeout' son todo lo que se necesita para solucionar este problema. Los usuarios no deberían tener que instalar parches para corregir el código de los desarrolladores web (sin ofender a los desarrolladores web). –

0

Al igual que la persona que se menciona $ ("*"), intente no usar $ (esto) como un selector de enlace para eventos personalizados, esto causó que un script mío reciente destruyera los tiempos de carga del sistema.

Cuestiones relacionadas