25

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 cumplieran con solo algunas advertencias, pero todavía window.onload() no se está ejecutando. ¿Alguien encontró este problema?window.onload() no está disparando con IE 8 en la primera toma

aquí es 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 parece actualizar la página para que funcione.

¿Falta algo aquí?

ACTUALIZACIÓN:

Uno de los complementos de IE creado este problema, después de desactivar su excelente trabajo. Gracias por su tiempo y respuestas :)

+0

Si está abriendo el archivo localmente, como en el sistema de archivos, IE podría estar tratando de proteger usted de problemas de seguridad? –

+0

sí, no me quejo de eso. Pero un simple archivo HTML con una ventana.onload no funciona con IE 8, si utilizo un servidor web como Apache y no puedo entender por qué. – Manohar

+1

@Manohar ¿Puedes decir qué complemento estaba haciendo el problema? También estoy enfrentando el mismo problema con IE9. –

Respuesta

1

onload se activa después de que se haya cargado TODO su contenido (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).

+0

Se descarta la primera posibilidad ya que, onload, estoy llamando a una función de javascript que establece un número. Estoy buscando errores en mi código, acabo de escribir un código de ejemplo que funciona bien en IE 8 con onload (sin embargo, el contenido onload está bloqueado con este error: 'Para ayudar a proteger su seguridad, Internet Explorer ha restringido la ejecución de este sitio web scripts ... 'cada vez, tengo que' Permitir 'para que funcione). – Manohar

+0

Descubrí que si Apache está renderizando la página, onload no se activa. Tengo un código de muestra que puede demostrar esto. – Manohar

+0

Creo que podría malinterpretar. No importa lo que realmente haga su controlador de carga, lo que importa es que ni siquiera se ejecutará _hasta_ cada elemento de página se ha "cargado" (no solo el html, sino CSS, JS e imágenes externas). Si IE se está estancando descargando un recurso externo o ejecutando JS en línea, entonces no se ha "cargado" y su script no se activará. Puede tener un bucle en algún lugar de su código que impida que se complete la "carga". – SpliFF

0

Si obtiene resultados diferentes usando Apache frente a otro servidor web (IIS?) Y comparando el resultado final usando 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, entonces el Portable Apps version of the GUI wget es bastante agradable.

+0

No lo he probado en IIS, lo he intentado solo en Apache y no funciona para mí. Intenté usar window.onload = new Function ("alert ('!');"); también, incluso esto no está disparando en IE-8. – Manohar

0

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> 
+0

Funciona como usted describe si abro directamente el archivo HTML con IE 8. Pero cuando pongo el mismo archivo en apache y accedo a él a través del servidor, onload no se activa por primera vez. Tengo que actualizar manualmente cada vez para hacer que el bloque de código en onload funcione. Todavía no lo he probado en diferentes máquinas. Voy a tratar de actualizar aquí. – Manohar

+0

Sospecho que está relacionado con xhtml entonces. Intenta usar HTML regular. –

+0

Debo añadir: si se trata de un problema XHTML, la solución podría ser la solución de Fran Cooper, que consiste en poner envoltorios CDATA en todo el javascript. –

3

Puede tener un error en su JavaScript, si eso sucede, cualquier JavaScript después de eso no funcionará correctamente.

Intente eliminar la referencia a login.js y common.js y pruebe una alerta dentro de su función problemática.

2

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 esperaba, pruebe el bit CDATA alrededor de su bloque interno de JavaScript.

Y luego, si eso no funciona como se esperaba, es probable que exista algo en el código JavaScript externo encima que impida que se descargue la descarga. El cartel anterior menciona esto. En ese punto, intente con su consola de errores o su depurador para señalar el camino.

25

Para IE intento:

window.onload = new function() { alert('hello');}; 
+8

esto ejecuta la función inmediatamente como un efecto secundario de nuevo. ¡onload se establece en el resultado de la creación del objeto! (nuevo objeto) –

9

Este es un hilo bastante viejo, pero me pareció una solución que podría ayudar a los demás.

Estaba agregando una función a window.onload a 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, el window.onload no se activaría, pero todas las llamadas posteriores lo harían.

descubrí que si pongo esto en el archivo HTML como un script interno, que iba a funcionar cada vez que:

var windowOnload = window.onload || function() {}; 
window.onload = function() { windowOnload(); }; 

Todo el código anterior se "inicializa" IE8 de window.onload discretamente. Sospecho que IE8 no puede activar window.onload por 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 la primera vez que eso es lo que está haciendo IE8: 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 onload. No nos importa lo que se ejecute, o lo que no, así que simplemente nos aseguramos de utilizar cualquier código existente window.onload que ya esté definido (solo como precaución).

Es importante tener esto como un script interno para el HTML (al menos en mi prueba).

Su HTML sería por lo tanto ser algo como esto (las partes pertinentes):

<script type="text/javascript"> 
    var windowOnload=window.onload||function(){};window.onload=function(){windowOnload();}; 
</script> 
<script type="text/javascript" src="script.js"> 
</script> 

De mis pruebas, después de borrar la memoria caché y volver a cargar la página, he conseguido window.onload para disparar con éxito cada vez.

Espero que esto ayude.

0

Sé que esta es una vieja pregunta, pero acabo de enfrentar 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 siempre que llega a (onload =) parte hasta que agregué 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'.

+0

la 2da versión ejecuta la nueva función inmediatamente, ya que llamar a new creará un 'nuevo' objeto con function() como constructor. –

0

Antigua pregunta pero tuve el mismo problema pero resultó ser otro problema. Mi problema fue que hice <script type="application/javascript"> que <IE9 no entiende o intenta ejecutar incluso. Para que funcione en los navegadores más antiguos, todavía tiene que usar text/javascript aunque técnicamente no es el tipo correcto ...

Cuestiones relacionadas