javascript - tomo - retencion de liquidos que hacer
window.onload() no se activa con IE 8 en la primera toma (9)
Estoy tratando de hacer que mis páginas funcionen correctamente con IE 8, descubrí desde aquí: http://www.masykur.web.id/post/How-to-Make-Our-Website-to-be-Ready-for-IE8.aspx que, mi página tiene que ser compatible con XHTML 1.0 y al menos compatible con CSS 2.1, hice que mi página y CSS cumplan con pocas advertencias, pero todavía window.onload () no se está ejecutando. ¿Alguien encontró este problema?
aquí está el fragmento de código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8"/>
<title>Testing</title>
<link rel="stylesheet" href="test.css" type="text/css"></link>
<script type="text/javascript" src="login.js"></script>
<script type="text/javascript" src="common.js"></script>
<script type="text/javascript">
window.onload = function()
{
// Not coming here at all on first shot
}
</script>
</head>
<body>
.
.
.
Sin embargo, actualizar la página parece hacer que funcione.
¿Me estoy perdiendo de algo?
ACTUALIZAR:
Uno de los complementos de IE creó este problema después de deshabilitar su funcionamiento correcto. Gracias por su tiempo y respuestas :)
El siguiente código funciona para mí. Cuando cargo la página en Firefox, veo la alerta al instante. La primera vez que cargué la página en IE 8 me avisa sobre el contenido activo. Si permití el contenido bloqueado, me pide que lo confirme, lo cual hago. Entonces la alerta aparece como se esperaba. Si esto no funciona para ti, prueba IE 8 en una computadora diferente o comienza a eliminar el código en tu página para verificar si hay errores. Podría hacer una búsqueda binaria: comente la primera mitad de la página y vea si aparece la alerta; si aún no lo hace, elimine el comentario de la primera mitad y comente la segunda mitad. Repita según sea necesario hasta que lo haya reducido al código ofensivo. Por cierto, no necesitas XHTML para cumplir con IE8. HTML funciona bien y en realidad tiene algunas ventajas.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8"/>
<title></title>
<style type="text/css">
</style>
<script type="text/javascript">
window.onload=function() { alert(''hello'');};
</script>
</head>
<body>
</body>
</html>
Este es un hilo muy viejo, pero encontré una solución que podría ayudar a otros.
Estaba agregando una función a window.onload
través de un script dinámicamente inyectado (realmente para imitar una carga de script externa por razones que no son importantes en este contexto). Como se indica en esta publicación, en la primera carga dentro de IE8, la carga de la window.onload
no se window.onload
, pero todas las llamadas posteriores lo harían.
Descubrí que si pongo esto en el archivo HTML como un script interno, funcionaría cada vez:
var windowOnload = window.onload || function() {};
window.onload = function() { windowOnload(); };
Todo lo que hace el código anterior es "inicializar" la ventana de IE8. window.onload
discretamente. Sospecho que IE8 no puede activar window.onload
la primera vez si se llama desde un script externo ya que el evento onload
aún no está conectado a la ventana (o en términos técnicos, su typeof no está definido). Parece que es la primera vez que IE8 lo está haciendo: adjuntar onload
a la ventana sin ejecutarla correctamente.
El código anterior se vuelve bastante obvio: simplemente estamos forzando a IE8 a reconocer el evento de onload
. No nos importa qué se ejecuta o qué no, así que simplemente nos aseguramos de atravesar cualquier código existente de window.onload
que ya esté definido (solo como precaución).
Es importante tener esto como un script interno para el HTML (al menos de mi prueba).
Tu HTML se vería así (las partes relevantes):
<script type="text/javascript">
var windowOnload=window.onload||function(){};window.onload=function(){windowOnload();};
</script>
<script type="text/javascript" src="script.js">
</script>
Desde mi prueba, después de borrar el caché y volver a cargar la página, obtuve window.onload
para que se active con éxito cada vez.
Espero que esto ayude.
No tengo IE8 para probar personalmente, pero ¿qué hace esta prueba?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test IE 8</title>
<script type="text/javascript">
/* <![CDATA[ */
window.onload = function(){alert(''Good morning!'');}
/* ]]> */
</script>
</head>
<body>
<h1>Hello</h1>
<body>
</html>
Si esta prueba funciona como se espera, pruebe el bit CDATA alrededor de su bloque JavaScript interno.
Y luego, si eso no funciona como se esperaba, probablemente exista algo en el JavaScript externo encima que impida que su descarga se active. El cartel anterior menciona esto. En ese punto, intente con su consola de errores o su depurador para señalar el camino.
Para IE, intente:
window.onload = new function() { alert(''hello'');};
Puede tener un error en su JavaScript, si eso sucede, cualquier JavaScript posterior no funcionará correctamente.
Intente eliminar la referencia a login.js y common.js y pruebe una alerta dentro de su función problemática.
Sé que esta es una vieja pregunta, pero simplemente enfrenté lo mismo.
window.onload=function() { alert(''hello'');};
se trata de manera diferente a
window.onload= new function() { alert(''hello'');};
La palabra clave aquí es new
.
Mi JS terminaba cada vez que llegaba a (onload =) parte hasta que añadí la palabra ''nuevo'' antes de ''función''. Aunque funcionó bien sin ''nuevo'' en mi servidor local, pero una vez que lo puse en línea, no funciona hasta que agregue ''nuevo''.
Si obtiene resultados diferentes utilizando Apache frente a otro servidor web (IIS?) Y comparando el resultado final con IE8, entonces la diferencia debe estar en el encabezado del tipo de contenido que se envía. Obtenga la utilidad wget para su plataforma y vea los encabezados que se producen. Si está en Windows, la versión de Aplicaciones portátiles del GUI wget es bastante agradable.
Una vieja pregunta pero tuve el mismo problema, pero resultó ser otro problema. Mi problema es que hice <script type="application/javascript">
que <IE9
no entiende o intenta ejecutar incluso. Para que funcione para navegadores más antiguos, todavía tiene que usar text/javascript
aunque este no sea técnicamente el tipo correcto ...
encender incendios después de que TODO tu contenido se haya cargado (incluidas las imágenes externas, etc.). Es posible que esos recursos tarden mucho tiempo en cargarse en el primer intento (antes de que se guarden en caché). Otra posibilidad es un error en su código que solo afecta a IE, ya que detiene sus scripts (pero solo la primera vez es impar).