¿Hay alguna forma de detectar cuando una página ha terminado de cargarse, es decir, todo su contenido, javascript y activos como css e imágenes?
asi como:
if(PAGE HAS FINISHED LOADING)
{
// do something amazing
}
y además, si la página se ha estado cargando durante más de 1 minuto, haga otra cosa como:
if(PAGE HAS BEEN LOADING FOR 1 MIN)
{
// do something else amazing
}
He visto sitios web como MobileMe de Apple realizar comprobaciones similares, pero no he podido averiguarlo en sus enormes bibliotecas de códigos.
¿Alguien puede ayudar?
Gracias
EDITAR: Esto es esencialmente lo que quiero hacer:
// hide content
$("#hide").hide();
// hide loading
$("#loading").hide();
// fade in loading animation
setTimeout($('#loading').fadeIn(), 200);
jQuery(window).load(function() {
$("#hide").fadeIn();
$("#loading").fadeOut(function() {
$(this).remove();
clearInterval(loadingAnim);
});
setTimeout(function() {
$("#error").fadeIn();
}, 60000);
});
window.onload
(o$(window).load()
) no funcionaría?Respuestas:
O http://jsfiddle.net/tangibleJ/fLLrs/1/
Consulte también http://api.jquery.com/load-event/ para obtener una explicación sobre jQuery (ventana) .load.
Actualizar
En esta página se puede encontrar una explicación detallada sobre cómo funciona la carga de JavaScript y los dos eventos DOMContentLoaded y OnLoad .
DOMContentLoaded : cuando el DOM está listo para ser manipulado. La forma de jQuery de capturar este evento es con
jQuery(document).ready(function () {});
.OnLoad : cuando el DOM está listo y todos los activos , esto incluye imágenes, iframe, fuentes, etc. , se han cargado y la clase de rueda giratoria / hora desaparece. La forma de jQuery de capturar este evento es la mencionada anteriormente
jQuery(window).load
.fuente
jQuery.load()
quedó obsoleto desde jQuery / 1.8 y se eliminó en jQuery / 3. La sintaxis actual esjQuery(window).on("load", function(){/*...*/});
.Hay dos formas de hacer esto en jquery dependiendo de lo que esté buscando.
usando jquery puedes hacer
// esto esperará a que se carguen los activos de texto antes de llamar a esto (el dom .. css .. js)
// esto esperará a que todas las imágenes y activos de texto terminen de cargarse antes de ejecutar
fuente
Eso se llama onload. DOM ready se creó en realidad por la razón exacta por la que onload esperaba imágenes. (Respuesta tomada de Matchu a una pregunta similar hace un tiempo).
onload espera todos los recursos que forman parte del documento.
Enlace a una pregunta donde lo explicó todo:
Haz clic en mí, ¡sabes que quieres!
fuente
Creo que la forma más fácil sería
EDITAR, para estar un poco loco:
fuente
Otra opción puede consultar el document.readyState como,
De la documentación de readyState Page, el resumen del estado completo es
fuente
$(window).on("load" function () {//dostuff})
...?Una opción es que la página esté en blanco y que contenga una pequeña cantidad de JavaScript. Utilice el script para realizar una llamada AJAX para obtener el contenido real de la página y haga que la función de éxito escriba el resultado sobre el documento actual. En la función de tiempo de espera puedes "hacer algo más asombroso"
Pseudocódigo aproximado:
fuente
¿Es esto lo que tenías en mente?
fuente
Usando jquery: https://learn.jquery.com/using-jquery-core/document-ready/
fuente
Sin jquery ni nada de eso porque ¿por qué no?
fuente
jquery
funciona.DOMContentLoaded
se activa solo después de que se cargue el contenido externo (en particular, imágenes, que pueden llevar mucho tiempo en determinadas condiciones).jquery
realiza.ready()
usando eventos específicos del navegador, que (en la mayoría de los navegadores) ocurren antes de que se cargue el contenido externo.Para su información de las personas que han preguntado en los comentarios, esto es lo que realmente usé en los proyectos:
fuente