2010-10-08 7 views
5

Me he encontrado con función del error/no documentada en IE 7, 6.5 (¿quizás otros?). Esto no afecta a Opera (10.5x) Firefox (3.5.x) o probablemente a cualquier otro navegador (esto es todo lo que he probado hasta ahora). No parece ser una habilidad documentada de Javascript.Error múltiple del comentario de @ JS en IE

Al incluir un comentario denotado por barras dobles, y seguido directamente por el doble en los signos (//@@), el archivo completo .js se vuelve inútil. He comprobado varias variaciones y esto es lo que he encontrado (donde fallan = JS no está cargado, pass = JS está cargado):

  1. fallan: //@@
  2. fallan: //@ @
  3. fallan: //@@@ - no parece cualquier número de @ para hacer una diferencia
  4. fallan: //@@ text - no parece cualquier contenido siguiente para ayudar a
  5. fallan: //@[email protected] - cualquier contenido entre @ no parece ayudar a
  6. pase: // @@
  7. pase: // @ @ - espacio antes del primer @ parece prevenir
  8. pase: //hello @@ - cualquier contenido antes de la primera @ parece prevenir
  9. pase: /*@@*/ - sólo parece aplicarse a // estilo comentario

IE 7 - simplemente ignora el archivo, al tratar de hacer referencia al contenido de ese archivo se obtiene un error en la línea de "<function/object> is undefined". IE6.5 tiene la decencia de informar "Invalid character" lo que mejora significativamente su capacidad para encontrar el problema.

Y entonces la pregunta : ¿Alguien sabe por qué está pasando esto y qué está pasando?
Puedes trabajar con él (inserta un espacio, usa el otro estilo de comentario, etc.) pero vale la pena señalar que el problema está ahí, ya que puede llevar mucho tiempo depurarlo.

ACTUALIZACIÓN: cómo reproducir:

Fuente: flaw.ie.html

<html lang="en"> 
    <head> 
    <title>Test</title> 
    <script src="turnon.cc.js"></script> 
    <script src="flaw.ie.js"></script> 
    </head> 
    <body> 
    World 
    </body> 
</html> 

Fuente: flaw.ie.js

//@@ 
alert('hello'); 

Fuente: turnon.cc.js

/*@cc_on 
@*/ 

Resultado:
IE: la página: Mundial
FF/Opera: Alerta: ¡Hola!página: Mundo

Posible conclusión: Una vez que la compilación condicional está activada en IE, tenga cuidado con los comentarios que se asemejan vagamente a la sintaxis.

+0

Bueno Methodin tiene la causa raíz, no parece que haya una solución (corto de no utilizar las bibliotecas con las declaraciones de compilación condicional y evitar por sí mismo, o ser muy cuidadoso con los signos y comentarios). Definitivamente parece un error, pero también es corto. No hay/* cc_off */comando (al menos no está documentado/no funciona en las versiones de IE que tengo que probar) – Rudu

Respuesta

4

más probable en relación a los comentarios condicionales:

http://www.javascriptkit.com/javatutors/conditionalcompile.shtml

+1

Eso parece prometedor - sin duda estamos encontrando un use for @ en comentarios en JS ... sin embargo, todos los ejemplos (que puedo encontrar) se muestran en uso en comentarios '/ ** /' (solos) y se supone que solo funcionan después de que haya activado la compilación condicional ('@cc_on ') - se supone que debe ignorarlos de lo contrario. Esa es una falla bastante importante en su algoritmo de análisis si los comentarios '/ * @@ * /' funcionan, pero '// @@' no. – Rudu

+1

¡Ah, ja! Mientras escribía el código para reproducir el problema (gracias a @ Dr.Molle), descubrí que el uso de la biblioteca 'modernizer-1.5.min.js' (sin modificar) estaba marcando la diferencia: bajo y he aquí,'/@ cc_on' puede se encuentra allí (línea 20, char 95) - por lo que los comentarios condicionales parecen ser el comienzo del problema - una vez que están encendidos, no use '// @@'. Ilógicamente '/ * @@ * /' todavía está bien. – Rudu

1

No puedo reproducir este, tal vez depende de su medio ambiente.

Tome un vistazo a esto: http://support.microsoft.com/kb/323487/en Tal vez sea útil

+0

Es código sin compilar/no interpretado (archivo .html, con .css y .js incluidos). [corriendo a través de Apache para el registro] Pero ese error JScript .NET para el caso # 3 suena sospechosamente familiar, lo que implicaría que JScript.NET está siendo usado (incorrectamente) en lugar de Javascript (donde @ no tiene ningún significado) – Rudu

Cuestiones relacionadas