Почему наличие `‹script›` в строковом литерале вызывает синтаксическую ошибку JS?

Рассмотрим следующий код:

 var testVar = "<script>alert(\"a\")</script>@emaildomain.con";

В консоли на ФФ выдает ошибку

SyntaxError: незавершенный строковый литерал.

Однако, если вы измените script на xscript, ошибки не будет:

 var testVar = "<xscript>alert(\"a\")</xscript>@emaildomain.con";

Как правильно экранировать теги script в JS и почему включение их в строковый литерал вызывает такое поведение?


person jmite    schedule 11.12.2015    source источник


Ответы (1)


Часть </script> фактически закрывает начальный тег.

<script type="text/javascript">
     var testVar = "<script>alert(\"a\")</script>@emaildomain.con";
</script>

Итак, ваш сценарий будет таким:

<script type="text/javascript">
     var testVar = "<script>alert(\"a\")
</script>
@emaildomain.con";</script>

Чтобы решить проблему, вы можете сделать это:

<script type="text/javascript">
     var testVar = "<script>alert(\"a\")</" + "script>@emaildomain.con";
</script>
person Aᴍɪʀ    schedule 11.12.2015