Общие источники незавершенного строкового литерала

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

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

Зачем отмечать это как дубликат? У этого вопроса -2 голоса, и это совсем не тот вопрос. Похоже, кому-то больше нечего было делать.

szx 07.05.2015 18:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
56
1
136 082
19
Перейти к ответу Данный вопрос помечен как решенный

Ответы 19

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

Вы можете попробовать запустить сценарий через JSLint.

Я пробовал это. Вывод слишком шумный. Слишком много деталей форматирования, и я не видел ничего, что могло бы заставить скрипт не запускаться.

sutee 23.10.2008 01:49

Попробуйте «бинарный поиск». Удалите половину кода и попробуйте еще раз. Если ошибка не исчезла, удалите половину оставшегося кода. Если ошибки нет, верните то, что вы удалили, и удалите половину. Повторить.

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

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

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

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

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

Отсканируйте код, который появляется до в строке №, указанной в сообщении об ошибке. То, что не завершено, привело к тому, что что-то ниже по потоку (обвиненная строка #) было помечено.

Ищите разрывы строк! Часто это причина.

Я поддержу это - я наткнулся на это, пытаясь решить свою проблему, и все, что мне нужно было сделать, это удалить текст.

cryptic_star 25.05.2011 06:18

Вы знаете причину этого?

Niels Bom 21.11.2011 19:00

Это исправило это для меня, отличный улов.

CodeVirtuoso 05.09.2012 20:39

это сработало и для меня. почему зачем зачем ??

javier_domenech 24.12.2013 16:44

Выполните dos2unix file.js для преобразования переносов строк из CRLF в LF.

naXa 25.03.2016 11:02

Это решило мою проблему

Ryuuks 24.02.2017 17:06

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

Ответ принят как подходящий

У большинства браузеров есть проблемы с таким кодом:

var foo = "</script>";

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

Это было причиной моей ошибки, хотя скрипт прошел JSLint. Я изменил "</script>" на "</ scr" + "ipt>" и это исправило.

richardkmiller 16.08.2010 22:24

Фу. Есть ли в этом причина?

Jere 14.10.2010 23:31

Не могу поверить в это, проблема устранилась. Никогда бы не подумал об этом через миллион лет. :(

Jon Tackabury 14.01.2011 22:10

Возможно, вы забыли заключить свой скрипт в HTML-комментарии.

Lightness Races in Orbit 29.07.2011 20:42

невероятно ... исправил это и для меня.

rICh 18.11.2011 05:08

Также подойдет простой уход от косой черты.

jayarjo 11.03.2012 11:55

о да. у меня тоже работает. Благодарность!

nicmare 10.09.2012 15:23
var setScript = "<scr"+"ipt></script>"; вызывает у меня проблемы ... Как это исправить?
SearchForKnowledge 10.02.2015 23:19

Удалось ли нам определить, почему sting "<script>" приводит к ошибке незавершенного строкового литерала? Кажется подозрительным, что разделение строки на 2 разные части является документированным способом исправления этой ошибки. (Ложный положительный результат?)

Jeremy C. 05.03.2015 20:35

Я собирался отказаться от поиска и устранения проблем с 400-строчной строкой innerHTML, содержащей несколько тегов сценария ... Это сработало на удивление хорошо !!! ....

repzero 28.02.2016 20:43

Это случилось со мной, когда я копировал и вставлял текстовый редактор в Sublime. Я случайно скопировал возврат каретки и даже не знал, что он там есть. Мне пришлось перемещать курсор по строке, чтобы узнать, где находится возврат каретки.

Lonelydatum 11.08.2017 04:48

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

Вы пробовали Chromebug? Это Firebug для расширений.

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

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

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

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

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

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

К вашему сведению, вы не голосуете «за» ни одного единственного ответа на SO. Голосуйте за / против любого / всех ответов по своему усмотрению.

Lightness Races in Orbit 29.07.2011 20:42

Исправлена ​​моя проблема - проголосовали за! Спасибо!

Graeme Leighfield 29.09.2011 19:37

Это также устранило мою проблему, жаль, что я не понимаю Почему.

Niels Bom 21.11.2011 18:59

@NielsBom Он просто удаляет разрывы строк (заменяя их ничем)

kehers 10.11.2012 10:31

Это сработало для меня. Спасибо :-)

John T 02.11.2014 14:23

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

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

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

т.е.

</script>

т.е.

<&#47;script>

Если ничего не помогает, поищите символы Юникода, например

\u2028

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

str = str_replace(array("\r\n","\n\r","\r", "\n"), '<br />', stripslashes($str));

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

еще одна возможность. в моем случае это произошло из-за неопределенной переменной php $ _POST, используемой в методе отправки xhttp. это привело к завершению строки параметра send ().

ShaileshKumarMPatel 08.08.2019 18:05

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