73 votes

Pourquoi ne l'ajout d' </script> dans un commentaire de briser l'analyseur?

Pourquoi ne l'ajout d' </script> dans un commentaire briser l'analyseur? Est-ce un bug ou est-il quelque chose dans la documentation que j'ai négligé?

J'ai testé cela dans Chrome, Firefox, Opera, Internet Explorer et ils produisent tous le même résultat.

Commentaire sur une seule ligne:

function Foo(){
  // </script>
  alert("bar");
};

Foo();

Commentaire Multi-lignes:

function Foo(){
  /*
      </script>
  */
  alert("bar");
};

Foo();

102voto

mck89 Points 8661

Cela se produit parce que l'analyseur HTML tel que défini par le W3C est totalement séparé de la parser JavaScript. Après l' <script> balise, il semble pour la clôture de l' </script>, indépendamment du fait que c'est à l'intérieur des commentaires ou des chaînes, parce qu'il traite du code JS comme du texte normal.

33voto

torazaburo Points 6335

L'analyseur HTML de ne pas analyser JavaScript. Il ne traite les éléments HTML, denotated en <tag> et </tag> tags. Il n'a aucune idée que quelque chose est un JavaScript commentaire. Lorsqu'il voit l' </script> balise de fermeture, il suppose que l'élément de script est en cours de fermeture. La même chose serait de se produire quel que soit le contexte de la chaîne d' </script> apparu; par exemple, console.log("</script>") permettrait d'atteindre le même comportement.

C'est une assez bonne raison de ne pas intégrer des scripts à l'intérieur du HTML, mais plutôt de les inclure à l'extérieur.

9voto

shanavasm Points 328

Vous pouvez HTML échapper embedded code JavaScript

<script type="text/javascript">
//<!--

function Foo(){
 // </script>
  alert("bar");
};

Foo();

//-->
</script>

Ainsi, l'ensemble du code JavaScript est traitée comme commentaire HTML en HTML et l'analyseur de HTML les lignes de commentaires sont ignorés par l'interpréteur JavaScript.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X