Las propiedades del objeto window se borran cuando quedan huérfanas

Las propiedades del objeto global (window) se desactivan cuando una ventana queda huérfana. Las propiedades se desactivan para permitir la recolección de los elementos no utilizados de la ventana huérfana cuando no se encuentran más referencias a ella. Además, los temporizadores dejan de desencadenarse y la propagación de eventos (dentro de la ventana huérfana) cesa de inmediato. Las siguientes definiciones te ayudarán a comprender este tema:

iFrame transitorio: un iFrame analizado o creado temporalmente, agregado y luego eliminado del árbol Document Object Model (DOM) y que no se vuelve a utilizar se denomina iFrame "transitorio".

Ventana huérfana: cuando un iFrame transitorio se quita del árbol DOM, su ventana se considera "huérfana" (activa, pero no accesible de forma directa) hasta que se cierra.

Cambios en el comportamiento de iFrame en el modo estándar de IE9

Cuando se quitan elementos iFrame del árbol DOM, ocurren varias cosas:

  • Su objeto window huérfana se "limpia" para permitir que la ventana huérfana recolecte los elementos no utilizados. Un objeto window limpio (es decir, un objeto global) no tendrá ninguna propiedad visible. Esta limpieza solo implica quitar propiedades del objeto window—; realmente no elimina los objetos a los que hacían referencia esas propiedades. Esto permite que cualquier objeto integrado o definido por el usuario presente en la ventana huérfana sea accesible si, y solo si, existe otra referencia externa al objeto.
  • Los temporizadores existentes (por ejemplo, setTimeout) se cancelan y no se permite la ejecución de ningún otro temporizador.
  • La propagación de eventos en curso dentro de la ventana que queda huérfana se detiene (por ejemplo, como si la API stopImmediatePropagation hubiera sido invocada en el evento relacionado)
Esto es un cambio respecto al comportamiento de Windows Internet Explorer 8, donde ninguno de los pasos anteriores se lleva a cabo cuando la ventana del iFrame transitorio queda huérfana. Estos cambios de comportamiento solo se aplican al modo de IE9. Los modos heredados se comportan como en Internet Explorer 8.

En las versiones anteriores de Windows Internet Explorer (incluidos los modos de documento heredados de Windows Internet Explorer 9), cuando un iFrame se quitaba del árbol DOM, la memoria de la ventana huérfana solamente se recuperaba durante la exploración de la página. Hasta entonces, la memoria de la ventana huérfana se conservaba sin que se recopilaran los elementos no utilizados. En los infrecuentes casos donde los sitios utilizaban varios iFrames transitorios para descargar y/o ejecutar contenido sin exploración de la página, la cantidad de memoria por ventana huérfana podía acumularse hasta afectar negativamente la experiencia del usuario en la página. Las referencias ya existentes a objetos en ventanas huérfanas permanecen disponibles; sin embargo, volver a solicitar estas propiedades a través del objeto global generará errores. Los errores aparecerán como errores de script donde "myRequestedProperty" no existe o está sin definir.

Recomendamos que:

  • Los objetos requeridos de una ventana huérfana tengan referencias ya existentes (externas a la ventana huérfana) para poder obtener acceso a ellos, y que las funciones ejecutadas en el contexto de la ventana huérfana eviten las referencias a propiedades del objeto global (por ejemplo, Array, Object)
  • El código que espera que se desencadenen los temporizadores debería ser resistente a la posibilidad de que su ventana quede huérfana, lo que cancelaría los temporizadores existentes
  • Los controladores de eventos cuyos efectos secundarios son quitar el iFrame que los contiene deberían ser resistentes a la posibilidad de que su ventana quede huérfana, lo que conllevaría una stopImmediatePropagation del evento que se está propagando actualmente

Temas relacionados

Detalles de la API stopImmediatePropagation

 

 

Mostrar:
© 2014 Microsoft