Pourquoi dois-je échapper au caractère '/' en JavaScript?

Ce qui doit être évité dans les chaînes javascript. Ou plus précisément, pourquoi

var snaphtml = '<script src="http://seadragon.com/embed/lxe.js?width=auto&height=400px"></script>'; 

Donner une erreur de syntaxe? L'évasion du <\/script> final semble résoudre l'erreur de syntaxe, mais cela n'a pas de sens pour moi en tant que débutant javascript.

Le problème est que le navigateur Web voit la séquence " </script> " et décide que c'est la fin du bloc de script.

Une autre façon de résoudre le problème en dehors de l'utilisation d'une séquence d'échappement comme vous l'avez fait est de la séparer en 2 chaînes concaténées:

 "<" + "/script>" 

Le comportement que vous voyez n'est pas un bug dans la partie du navigateur.

Les navigateurs ne «regardent pas à l'intérieur» un bloc de script, ils passent simplement le contenu au moteur de script. La séquence " </script> " est la façon dont ils savent qu'ils sont arrivés à la fin du bloc, et comme le navigateur n'interprète pas le contenu du bloc, il n'a aucun moyen de savoir que c'est dans le contexte d'un Chaîne littérale dans le code du script.

N'oubliez pas que les navigateurs peuvent supporter plus de langages de script que le Javascript juste, même si ce n'est pas fréquemment vu. Internet Explorer prend en charge VBscript (et je pense que tout langage de script qui peut être exécuté par un hôte de script Windows, mais je n'en suis pas sûr). Et quand la possibilité d'avoir des blocs de script a été placé dans les navigateurs de retour quand, personne ne pourrait être sûr que Javascript serait finalement si universel.

Vous rencontrez actuellement un problème html-escape: le navigateur interprète </script> dans votre chaîne comme la balise close pour l'élément de script dans lequel votre javascript est intégré – de sorte que le navigateur, sa ligne semble manquante La citation unique proche:

 var snaphtml = '<script src="http://seadragon.com/embed/lxe.js?width=auto&height=400px"> 

Pour le réparer, comme vous l'avez trouvé, il vous suffit de changer </script> à tout autre chose, comme <\/script> ou \074/script> , etc.

Les seuls caractères dont vous avez besoin de s'inquiéter dans une chaîne javascript sont à double devis (si vous citez la chaîne avec un devis double), un devis unique (si vous citez la chaîne avec une seule citation), La barre oblique inverse, le retour de chariot (\ r), ou la transmission de ligne (\ n).

L'analyseur HTML interprètera la fin du jeton d'étiquette (délimiteur ETAGO </ ) dans votre chaîne, comme fin de l'étiquette de script en cours, vous donnant la chaîne non SyntaxError .

Il existe plusieurs solutions de rechange, y compris l'utilisation de blocs CDATA , mais la manière la plus simple est d'échapper à ce caractère ou de créer une concaténation de chaîne:

 var snaphtml = '<script src="...">\x3C/script>'; var snaphtml = '<script src="..."><' + '/script>'; 

Et bien sûr, vous pouvez également créer votre élément de script programme et l'ajouter à la tête:

 var newScript = document.createElement("script"); newScript.src = "..."; //... 

Voir Tout ce que vous avez toujours voulu savoir sur </ , aka. Le délimiteur d'étiquette finale (ETAGO) pour une explication détaillée. TL; DR, il n'y a pas besoin de hacks fous comme la concaténation de chaînes ou les échappes de caractères distincts – échappez-vous en tant que tel:

 var snaphtml = '<\/script>'; 

Notez également que cela n'est nécessaire que pour les scripts en ligne.