Распространенные источники незаконченного строкового литерала [дубликат]

StackOverflow https://stackoverflow.com/questions/227552

Вопрос

Я пытаюсь отладить скрипт JavaScript, который считывается в расширении Firefox и выполняется.Я могу видеть ошибки только через консоль Firebug (мой код невидим для Firebug), и он сообщает о "незавершенном строковом литерале".

Я проверил строку и линии вокруг нее, и все кажется прекрасным - круглые скобки и кавычки сбалансированы и т.д.Каковы другие возможные причины, которые я должен искать?

Это было полезно?

Решение

Похоже, что у большинства браузеров возникают проблемы с подобным кодом:

var foo = "</script>";

В Firefox, Opera и IE8 это приводит к ошибке unterminated string literal.Может быть довольно неприятно при сериализации html-кода, который включает скрипты.

Другие советы

Следите за перерывами на линии!Они часто являются причиной.

Я бы проголосовал за ответ jamtoday, если бы у меня была "репутация".

Если ваши данные поступают с помощью PHP, это может помочь

$str = str_replace(array("\r", "\n"), '', $str);

Я только что обнаружил, что "<\/script>" похоже, работает так же хорошо, как "</scr"+"ipt>".

Вы могли бы попробовать запустить скрипт через JSLint.

Просто избегайте закрытия тега или используйте ascii-код

ie

<\/script>

ie

<&#47;script>

Если вы сделали какие-либо вырезки / вставки:некоторые онлайн-маркеры синтаксиса искажают одинарные и двойные кавычки, превращая их в форматированные пары кавычек (совпадающие пары открытия и закрытия).(хотя я не могу найти никаких примеров прямо сейчас)...Таким образом, это влечет за собой нажатие Command- + несколько раз и просмотр ваших символов цитаты

Попробуйте другой шрифт? кроме того, разные редакторы и IDE используют разные токенизаторы и правила выделения, а JS - один из более динамичных языков для синтаксического анализа, поэтому попробуйте открыть файл в emacs, vim, gedit (с плагинами JS)...Если вам повезет, один из них покажет длинную фиолетовую строку, проходящую через конец файла.

Найдите строку, которая содержит неэкранированный одиночный qoute, который может быть вставлен каким-либо кодом на стороне сервера.

Вы избежали косых черт ( / )?У меня уже были проблемы с этим раньше

Вы пробовали Хромированный Жучок?Это Firebug для расширений.

В прошлом у меня были проблемы с угловыми кавычками ( ‘ ), обычно при копировании и вставке из Word.Замена их обычными одинарными кавычками ( ' ) делает свое дело.

Кроме того, имейте в виду, что %0A - это URL-кодированный символ перевода строки.Мне потребовалось некоторое время, чтобы найти, где был перевод строки в моем коде-нарушителе.

Если ничего не помогает, поищите некоторые символы uni-code, такие как

\u2028

это может привести к разрыву вашей строки более чем на одну строку и возникновению этой ошибки

Может быть, это потому, что у вас есть разрыв строки в вашем PHP-коде.Если вам нужны разрывы строк в вашем сообщении окна предупреждения, включите его в качестве экранированного синтаксиса в конце каждой строки вашего PHP-кода.Обычно я делаю это следующим образом:

$message = 'line 1.\\n';
$message .= 'line 2.';

Попробуйте "бинарный поиск".Удалите половину кода и повторите попытку.Если ошибка все еще присутствует, удалите половину оставшегося кода.Если ошибки там нет, поместите то, что вы удалили, обратно и удалите половину этого.Повторяю.

Вы должны быть в состоянии довольно быстро сузить его до нескольких строк.Мой опыт показывает, что на этом этапе вы заметите какую-то глупую искаженную строку.

Возможно, будет целесообразно выполнить это с сохраненной версией HTML-вывода в браузере, если вы не уверены, к какому серверному ресурсу относится ошибка.

Разработчик веб-страницы неправильно определил, какая кодировка используется браузером зрителя.Обычно это можно решить, указав кодировку в заголовке страницы.

Сканируйте код, который приходит до того , как строка #, упомянутая в сообщении об ошибке.Все, что не было обработано, привело к тому, что что-то ниже по потоку (обвиняемая строка #) было помечено.

Пробелы - это еще одна проблема, которую я нахожу, вызывающая эту ошибку.Может помочь использование функции для обрезки пробелов.

$str = str_replace(массив(" ", " ", " ", " "), '
', косые черты ($str));

Это должно сработать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top