2009-04-22 10 views
6

Mi sitio sufre el Operation Aborted error. Lo que me parece raro es que en mi caso el error solo sucede a veces. El sitio ha estado funcionando bien durante tres meses y hoy comienza a suceder, pero no siempre.Detectando la causa de la operación de IE Cancelada Número

La página donde esto ocurre es bastante grande con muchos controles de terceros. Lo que me gustaría es una herramienta que pueda identificar dónde ocurre la falla. Parece que lo mejor que puedo hacer es encontrar el primer error de javascript que ocurre después de la operación abortada; sin embargo, esto no ayuda mucho. Este error se debe a que un elemento del dom no está disponible, lo que esperaría ya que IE detuvo el análisis del HTML.

¿Alguien tiene alguna idea o truco para reducir esto?

Editar

Agradezco formas adicionales de resolver el problema; sin embargo, lo que estoy buscando es una forma de identificar qué script está causando el problema.

edición final

Después de cambiar a IE8, I fue capaz de determinar la causa fue diálogo emergente modal del AjaxControl Toolkit. No había una manera concreta de determinar esto, lo que es decepcionante, pero el depurador me permitió ver dónde estaba fallando, lo cual fue muy consistente. Como no hay forma de que el control le diga que mueva su inicialización, lo desactivé y tengo la secuencia de comandos para crear el control del lado del cliente en mi controlador de eventos de carga de documentos.

Este problema no es culpa del control, se produjo porque el contenido de la ventana emergente está en realidad en una segunda forma. Francamente, me sorprende que haya funcionado alguna vez.

+0

informe de errores JavaScript de IE es notoriamente inútil. ¿Recibes algún error en Firefox? – pkaeding

+0

nada en Firefox. – JoshBerke

Respuesta

3

¿Tiene algún javascript que esté manipulando el DOM, ya que el caso se describe en http://support.microsoft.com/kb/927917#more_information?

Intenta mover todos los bloques de scripts al final de la página, justo antes de la etiqueta </body>, y no intentes configurar la propiedad innerHTML de la etiqueta body.

Si el problema es con la ejecución de javascript antes de que DOM esté totalmente desarrollado, intente mover cualquier llamada de inicialización a una función que se ejecutará solo después de que la página esté completamente cargada. Así, en lugar de algo como esto:

<div class="myWidgetControl"/> 
<script type="text/javascript"> 
    initializeWidgets(); 
</script> 

intentar algo como esto:

<div class="myWidgetControl"/> 
<script type="text/javascript"> 
    $(document).ready(
    function() { initializeWidgets(); } 
); 
</script> 
+1

Ese es el problema, personalmente no estoy haciendo esto, pero no tengo ni idea, si los Cuadros de ComponentArt, Diálogos, Devolución de llamada, diálogos de herramientas Ajax, etc etc están haciendo esto. – JoshBerke

+0

El primer error de javascript que recibo proviene del registro de un juego de herramientas de control Ajax de una ventana emergente. está fallando porque $ get (elemento) es nulo, así que ni siquiera estábamos modificando el dom aquí ... – JoshBerke

+0

De acuerdo, acabo de agregar un ejemplo de cómo podrías evitar ese problema. ¿Eso ayuda en absoluto? – pkaeding

1

Este es un truco ingenioso he utilizado (basado en el enlace en los comentarios JS abajo) que evita por completo el Op Error de Ab sin afectar el rendimiento en otros navegadores. Primero envuelve cualquier secuencia de comandos que esté haciendo que pueda causar el error (por ejemplo, cargar/instanciar un widget de terceros) en una función, luego llame a esa función dentro de la función delayExecutionForIE - tenga en cuenta que la llamada al myFunction está ahí dos veces, una vez para IE y una vez para buenos navegadores.

Su script de terceros podría evitar que esto funcione, dependiendo de lo que hace y cómo espera ser cargado, pero definitivamente vale la pena intentarlo.

function delayExecutionForIE() { 
     if (typeof document.all == "object" && 
      (document.readyState != "loaded" 
      && document.readyState != "complete") 
     ) { 
      try { 
        //If IE is used, use the trick by Diego Perini 
        //http://javascript.nwbox.com/IEContentLoaded/ 
        document.documentElement.doScroll("left"); 
        myFunction(); 
      } catch(error) { 
        setTimeout(delayExecutionForIE, 200); 
      } 
     } else { 
      myFunction(); 
     } 
} 

function myFunction() { 
    //this is your function that manipulates the DOM 
} 

delayExecutionForIE(); 
0

Aunque IE8 ya no provocará que el error de "accidente" la representación en su totalidad, en lugar de detectar un error, que es, por desgracia, no ha caído en la depurador de JavaScript que se encuentra en las nuevas herramientas de desarrollo, y el mensaje de error doesn' Te digo dónde ocurrió realmente el error.

Una solución temporal, que sin duda es tediosa, pero podría encontrar el problema, es utilizar el depurador de IE8 para poner un punto de interrupción en la primera pieza de código JavaScript que se ejecuta, y luego continuar presionando el botón "Paso" hasta que aparece un icono de error en la esquina inferior izquierda del navegador. Cuando eso sucede, usted sabe que la línea de código que causa el error fue la que se resaltó justo antes de hacer clic en el paso. Sin embargo, es probable que se trate de un código bastante extenso, pero no puedo pensar en nada más (bueno, excepto en contactar a los proveedores de ese código de terceros y ver si tienen alguna actualización que pueda estar relacionada).)

Por supuesto, podría decirle a sus usuarios que actualicen a IE8. ;)

+0

Bueno, me actualicé a IE8 y aunque ya no se equivoca cuando ocurre el error, pierdo la funcionalidad crítica en la aplicación. Tengo una buena idea de qué está causando el problema ahora, solo necesito probarlo y probarlo. Gracias por la información adicional – JoshBerke

+0

Ese error aún ocurre en IE8, pero no con tanta frecuencia. Ver el artículo de Robert.K arriba. – Spongeboy

0

Y Microsoft hace recomienda actualizar a IE8!

1

en la mayoría de los casos se trata de un problema DOM en JS.

$(element).append(someHtml); 

por lo que en decir, se puede añadir contenido a un objeto sólo si tiene su etiqueta de cierre

Por ejemplo el código de abajo hará que el Internet Explorer 7 para llevar el mensaje "Operación anulada"

<div id="o"> 

... 
$(o).appendChild(); 
... 

</div> 

Y de la manera correcta

<div id="o"> 

... 

</div> 

$(o).appendChild(); 
Cuestiones relacionadas