2008-12-11 13 views
20

Estoy viendo muchos errores de Javascript en IE8 en páginas que funcionaron bien en IE7 (y Firefox, Chrome y Safari). Sé que IE hizo algunos cambios a cosas como la seguridad de Javascript. Algunos de estos no dan mensajes de error claros: cosas como violaciones de dominios cruzados pueden terminar arrojando excepciones muy vagas.¿Cuáles son las causas más probables de errores de Javascript en IE8?

Hagamos una lista de verificación de los principales delincuentes cuando estamos solucionando errores de IE8 Javascript. Por favor, escriba uno cambiar a la forma IE8 Javascript que causaría un error de Javascript.

Respuesta

13

¡Puedo verificar que las publicadas por "unique_username" son precisas!

(cita) En realidad, un montón de cosas ha cambiado.

En primer lugar, REALMENTE importa en qué modo se encuentre. En IE8, hay 3 modos (TRES).

  • IE5 Peculiaridades - Tu página no tiene tipo de documento, página se representa como IE5 hizo
  • IE 7 Normas de modo - que tiene un tipo de documento, pero ya sea excluido de las normas de modo IE8, o se están ejecutando en el servidor local o en "modo de compatibilidad"
  • IE 8 Normas de modo - que tiene un tipo de documento, y está en la intranet (modo por defecto)

Ahora bien, si se renderiza en modo IE5/IE7, entonces nada cambia, excepto que hay Se agregarán algunos métodos que no deberían interferir con tu página.

Sin embargo, si, como la mayoría, está ejecutando un conjunto de tipos de documentos y, por lo tanto, en el modo Estándares IE8, se han producido los siguientes cambios.

1.) document.getElementById(id); //now only returns the CORRECT matches! 

2.) .getElementsByName (name); // ahora solo devuelve las coincidencias CORRECT! ¡no, no arreglado!

3.) .getAttribute(name); //returns the CORRECT value for the given attribute! 
4.) .setAttribute(name, value); //actually SETS the name/value CORRECTLY (no more cAmElCaSe crud)! 
5.) CSS Expressions are NO LONGER allowed (deprecated) 
6.) Operation Aborted errors will still be thrown (in some cases) however the cases are fewer, and the error won't kill the entire page/DOM 
7.) The attributes[] array on elements should (from the RC build onwards) be correct in terms of contents, have a length, etc. 
8.) Button elements now submit the contents of the value attribute, NOT the HTML contents of the Button Tag 

También ha habido un montón de correcciones de estilo CSS 2.1, así que las cosas que se han convertido raro antes, o hacks necesarios, deben ser mucho mejor. (Consulte a continuación los detalles sobre alfa/transparencia - ha habido grandes cambios)

Consulte el IE Blog para obtener más información.

Véase también Web Bug Track para los detalles de grano fino sobre errores y defectos para IE8 (y todos los demás navegadores)

SVG, esquinas redondeadas, detectores de eventos basados ​​en ECMAScript, Mejor Forma elemento de diseño/eventos etc. siguen desaparecidos.

PD Si tiene problemas específicos, avísenos y los ayudaremos a encontrarlos. ;-)

actualizaciones:

ventana.cambiar el tamaño de los eventos están actualmente rotas en IE8 Beta 2 e IE8 socio Release 1 (no se disparará) ahora fijado en RTM construir

window.open(); in IE8 Partner Release is sometimes failing "claiming" that the target url is not available (quirky, hard to reproduce) 
10

Aquí hay un muy divertido una (/ sarcasmo off) que descubrí. Si tiene un tipo MIME de "application/javascript", en lugar de "text/javascript", Internet Explorer:

A) ¿ignorará el tipo MIME inesperado y usará el archivo de todos modos?

B) no cargar el archivo en absoluto?

C) tome las primeras cien líneas o más del archivo, anteponga a otro archivo JS que aparezca antes en el HTML, y luego dele todo tipo de errores porque su medio archivo fuera de servicio + real archivo no funciona?

Así es, la respuesta es C ... No es broma. Solíamos utilizar el tipo MIME "application/javascript" para evitar el almacenamiento en caché de archivos JS en IE6/7, y como resultado, perdí un día entero tratando de descubrir por qué IE8 estaba dando algunos errores realmente locos. Afortunadamente finalmente descubrí qué estaba pasando cuando me dijeron que tenía un error en la línea 650 de un archivo de 500 líneas (y luego, cuando vi el archivo en el depurador, vi el otro archivo anterior).

Moraleja de la historia: si quiere que IE8 funcione, NO use "application/javascript" para el tipo MIME de sus archivos JS.

+0

Resultó que solo cambiar el tipo MIME del encabezado de respuesta HTTP no era suficiente; finalmente terminé teniendo que abandonar por completo mi servlet Javascript, ya que los archivos JS servidos estáticamente por Apache funcionaban bien en IE8 (y no quería perder más tiempo reparando los encabezados del servlet). – machineghost

+1

¡Y pensé que me estaba volviendo loca! ¿No se supone que esto es "estándar"? application/javascript simplemente rompe mi JSONP entre sitios con IE 8 ... ¡Gracias! – jldupont

+1

Esto parece ser cierto incluso para IE9. –

1

Un poco tarde para esta fiesta, pero al investigar la misma pregunta me encontré con este artículo MSDN que destaca las funciones que no son compatibles con el motor JScript de IE 8.

Cuestiones relacionadas