2010-09-08 11 views
17

¿Alguien podría decirme la diferencia entre el estado "interactivo" de document.readyState y "DOMContentLoaded"?document.readystate of "interactive" vs. ondomcontentloaded?

No pude encontrar mucha información sobre el estado "interactivo" y lo que específicamente está disponible para ser utilizado en la página.

This page dice:

interactiva - se ha cargado lo suficiente y el usuario puede interactuar con él

que parece un montón cojonudo como el caso DOMContentLoaded.

Escribí un quick test page here que parece sugerir que el estado interactivo parece estar disponible antes del evento DOMContentLoaded.

Entonces, ¿alguien podría aclararme o darme alguna información sobre lo que está disponible para ser manipulado en la página en el estado interactivo y si es lo mismo que DOMContentLoaded y, de ser así, por qué está disponible antes de DOMContentLoaded?

:)

Cheers, Yansky.

Editar: se olvidó de agregar, debe estar ejecutando FF4b para poder usar/ver la nueva función de estado listo.

Respuesta

4

Solo para responder mi propia pregunta aquí, parece que el evento DOMContentLoaded es igual al document.interactive estado preparado.

+1

¿Tiene una fuente para esta información? –

+0

@ Adam Heath - no exactamente. Estaba haciendo la misma pregunta en el canal mozilla #extdev irc y uno de los mods dice que sucede al mismo tiempo. Aquí están los detalles del canal mozilla irc: https://wiki.mozilla.org/IRC#Commonly_Used_Mozilla_IRC_Channels – Yansky

+2

Eso no es del todo correcto. De acuerdo con las especificaciones de HTML5, las secuencias de comandos Defer se deben ejecutar entre interactivo y DOMContentLoaded. Dicho esto, si no usas 'diferir' en absoluto, están cerca de ser equivalentes: en ese DOMContentLoaded seguirá el estado 'interactivo', sin que haya nada que hacer entre ellos que afecte a otros scripts o al documento. – hexalys

13

Una vez que el agente de usuario deja de analizar el documento, el agente de usuario debe ejecutar los siguientes pasos:

  1. Coloque el documento actual a la disposición "interactiva" y el punto de inserción a indefinido.

  2. Apague todos los nodos de la pila de elementos abiertos.

  3. Si la lista de secuencias de comandos que se ejecutarán cuando el documento haya terminado el análisis no está vacía, ejecutar estos pasos secundarios:

    un. Gire el bucle de evento hasta que el primer script en la lista de scripts que se ejecutará cuando el documento haya finalizado el análisis tenga su bandera "lista para ser ejecutada" establecida y el documento del analizador no tenga ninguna hoja de estilo que esté bloqueando scripts.

    b. Ejecute la primera secuencia de comandos en la lista de scripts que se ejecutará cuando el documento haya terminado de analizarse.

    c. Elimine el primer elemento del script de la lista de scripts que se ejecutará cuando el documento haya finalizado el análisis (es decir, cambie la primera entrada de la lista).

    d.Si la lista de scripts que se ejecutarán cuando el documento ha terminado de analizarse aún no está vacía, repita estos subepsos nuevamente desde la subetapa a.

  4. Queue una tarea para desencadenar un evento simple que burbujea con el nombre DOMContentLoaded en el documento. . . . http://dev.w3.org/html5/spec/the-end.html#the-end

+2

Para resúmenes de lo que significa: 1. Se ejecutan JavaScripts que deben ejecutarse inmediatamente después del análisis "list-of-scripts-that-will-execute-when-the-document-has-finished-parsing" 2 El evento DomContentLoaded se desencadena 3. JavaScripts "list-of-scripts-that-will-execute-in-order-as-soon-as-possible" se ejecutan 4. readyState cambia a "completo" (en lugar de "interactivo")) y activando el evento de inicio "onload". –

+0

Supongo que la "lista de scripts-que-ejecutará-cuando-el-documento-ha-terminado-analizando" se refiere a JavaScript que usa "document.write" que debe ejecutarse durante el readyState "interactivo". Entonces, el intervalo de tiempo después de analizar el DOM y terminar de ejecutar los que bloquean JavaScripts es anterior a "DomContentLoaded" –

+1

Yaniv, solo para ser técnicamente correcto, no debe ejecutar scripts document.write en el estado "interactivo". El documento ya se ha analizado o procesado ... La secuencia es la siguiente: estado 'interactivo'> ejecutar 'defer' y los demás scripts de bloqueo> DOMContentLoaded> ejecutar el script 'async' restante> 'completar'. Sin embargo, lo que puede hacer es anular la función document.write en 'interactive', de modo que si alguna de las secuencias de comandos async utiliza document.write, puede manejarla usando otros métodos. También tenga en cuenta que el estado "interactivo" no funciona correctamente (por ejemplo, que se active demasiado pronto) en IE. – hexalys