2010-10-08 6 views
5

Je suis tombé sur un bug /non documenté fonctionnalité dans IE 7, 6.5 (peut-être d'autres?). Cela n'affecte pas Opera (10.5x) Firefox (3.5.x) ou probablement tout autre navigateur (c'est tout ce que j'ai testé jusqu'ici). Cela ne semble pas être une capacité documentée de Javascript.Plusieurs @ bogue de commentaire JS dans IE

En incluant un commentaire indiqué par des doubles barres obliques et directement suivi d'un double aux signes (//@@), le fichier entier .js est rendu inutilisable. J'ai vérifié plusieurs variantes et voici ce que j'ai trouvé (où fail = JS est pas chargé, passe = JS est chargé):

  1. échouent: //@@
  2. échouent: //@ @
  3. échouent: semble tout contenu entre @ ne pas aider
  4. - //@[email protected]: //@@@ -: - un certain nombre de @ ne semble pas faire une différence
  5. échouent //@@ text tout contenu suivant ne semble pas aider
  6. échouent
  7. passe: // @@
  8. passe: // @ @ - espace avant le premier @ semble empêcher
  9. passe: //hello @@ - tout contenu avant la première @ semble empêcher
  10. passe: /*@@*/ - ne semble appliquer à // style commentaire

IE 7 - ignore simplement le fichier, en essayant de référencer le contenu de ce fichier, vous obtenez une erreur sur les lignes de "<function/object> is undefined". IE6.5 a la décence de signaler "Invalid character" qui améliore considérablement votre capacité à trouver le problème!

Et ainsi le question: Est-ce que quelqu'un sait pourquoi cela se passe et qu'est-ce qui se passe?
Vous pouvez travailler avec (insérer un espace, utiliser l'autre style de commentaire, etc.) mais il est intéressant de noter le problème, car il peut prendre beaucoup de temps à déboguer.

MISE À JOUR: Comment reproduire:

Source: 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> 

Source: flaw.ie.js

//@@ 
alert('hello'); 

Source: turnon.cc.js

/*@cc_on 
@*/ 

Résultat:
IE: Page: Monde
FF/Opera: Alerte: Bonjour!page: World

Conclusion possible: Une fois que la compilation conditionnelle est activée dans IE, faites attention aux commentaires qui ressemblent vaguement à la syntaxe.

+0

bien Methodin a la cause racine, il ne ressemble pas il y a une solution (à court de ne pas utiliser les bibliothèques avec les déclarations de compilation conditionnelles et les éviter vous-même, ou étant très prudent avec au signes et commentaires). Il semble vraiment être un bug, mais aussi court il n'y a pas de commande/* cc_off */(au moins ce n'est pas documenté/ne fonctionne pas dans les versions IE que je dois tester) – Rudu

Répondre

4

Très probablement lié à des commentaires conditionnels:

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

+1

Cela semble prometteur - nous trouvons certainement un utiliser pour @ dans les commentaires dans JS ... cependant tous les exemples (je peux trouver) sont show use dans les commentaires/**/'(seuls) et il est censé fonctionner seulement après que vous avez activé la compilation conditionnelle (' @cc_on ') - c'est supposé les ignorer autrement. C'est un défaut majeur dans leur algorithme d'analyse syntaxique si les commentaires '/ * @@ * /' fonctionnent mais que '// @@' ne le fait pas. – Rudu

+1

Ah, ha! En écrivant du code pour reproduire le problème (merci @ Dr.Molle), j'ai découvert que l'utilisation de la librairie 'modernizer-1.5.min.js' (non modifiée) faisait la différence - bas et voici,'/@ cc_on' peut se trouvent là (ligne 20, caractère 95) - donc les commentaires conditionnels semblent être le début du problème - une fois qu'ils sont activés, n'utilisez pas '// @@'. Illogiquement '/ * @@ * /' est toujours correct. – Rudu

1

Je ne peux pas reproduire ce, peut-être cela dépend de votre environnement.

Jetez un oeil à ceci: http://support.microsoft.com/kb/323487/en Peut-être il est utile

+0

C'est un code non-compilé/non-interprété (fichier .html, avec .css et .js inclus). [passage par Apache pour l'enregistrement] Mais cette erreur JScript .NET pour le cas # 3 semble étrangement familière - ce qui impliquerait que JScript.NET est utilisé (incorrectement) à la place de Javascript (où @ n'a aucune signification) – Rudu

Questions connexes