posibilidad de que la función jQuery document ready () tarde mucho tiempo en ejecutarse

Mi problema es que a veces un trozo de JavaScript (a menudo Google Analytics) puede tardar mucho tiempo en cargarse, aunque no es importante que el HTML esté listo para ser “atravesado y manipulado”. Si tuviera que utilizar el siguiente código:

$(document).ready(function () { $("p").text("The DOM is now loaded and can be manipulated."); }); 

¿Significaría esto que

no se completaría hasta que se cargue algo como Google Analytics?

En general, no se requiere algo como Google Analytics en la mayoría de los sitios web y, a menudo, he descubierto que estoy esperando a que se cargue. (No quiero usar onload debido a su poca fiabilidad ).

¿Hay una manera mejor o una manera de decir “no esperar” […] “?

Nota: normalmente no puedo colocar el código en una etiqueta justo antes de la etiqueta porque el sitio se basa en una plantilla. Usualmente solo puedo editar el “contenido” de la página.

¿Has intentado cargar Google Analytics desde dentro de la función Ready? Aquí hay un enlace que discute la carga dinámica de scripts. Probablemente harías esto al final después de que las otras partes de tu script listo ya se hubieran ejecutado.

Google realmente ha lanzado lo que ellos llaman Seguimiento Asíncrono :

  

Esto resuelve el problema porque solo se cargará una vez que se analice el DOM y, por lo tanto, ya puede usar todo en la página.

En la mayoría de los navegadores modernos ahora puedes escribir:

   

La secuencia de comandos se cargará de forma asíncrona en la mayoría de los navegadores y enfrentará diferentes esquemas de forma automática.

Es posible que desee utilizar la versión más larga, más segura para navegadores antiguos:

   

Algunos cavet

  • hay un error en IE6 que detendrá la carga del JS debido al protocolo faltante (consulte http://www.paulirish.com/2010/the-protocol-relative-url/ ) pero puede agregar el protocolo que está usando .
  • los navegadores más antiguos no entenderán la propiedad “async”, por lo que se cargarán si se difiere (después de que se cargue la página) o simplemente la carguen cuando la encuentren (por lo que no es async).

Esto es solo una conjetura, pero ¿has considerado setTimeOut ()?

 $(document).ready(function() { setTimeOut(function() { // Your code comes here }, 0); // We don't really need any delay }); 

setTimeOut () tiene la buena característica de escapar de la stack de llamadas, por lo que podría resolver su problema.

Tuve el mismo problema. Simplemente coloque esta línea en la primera carga de javascript y funcionará bien en IE después de eso:

 jQuery.noConflict();