2008-10-22 1 views
44

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

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

+2

Зачем отмечать это как дубликат? Этот вопрос имеет -2 голоса и на самом деле не тот же вопрос. Похоже, кому-то нечего было делать. – szx 2015-05-07 15:50:19

ответ

54

Большинством браузеров, кажется, есть проблемы с кодом, как это:

var foo = "</script>"; 

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

4

Ищите строку, которая содержит неизолированный единственный qoute, который может быть вставлен кодом на стороне сервера.

8

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

+0

Я пробовал это. Выход слишком шумный. Слишком много деталей форматирования, и я не видел ничего, что могло бы заставить скрипт не запускаться. – sutee 2008-10-22 21:49:25

0

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

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

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

0

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

4

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

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

0

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

54

Ищите разрывы! Это часто является причиной.

+0

Во-вторых, я наткнулся на это, пытаясь исправить мою проблему, и все, что мне нужно было сделать, это удалить текст. – 2011-05-25 02:18:48

+2

Вы знаете причину этого? – 2011-11-21 15:00:10

+0

Это исправлено для меня, большой улов. – CodeVirtuoso 2012-09-05 16:39:27

2

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

0

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

1

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

1

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

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

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

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

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

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

17

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

7

Просто сбежать от закрытия тегов или использовать ASCII код

т.е.

<\/script> 

т.е.

<&#47;script> 
1

Если ничего не помогает, искать какие-то символы уни-кода, как

\u2028 

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

-3

$ str = str_replace (массив ("\ r \ n", "\ n \ r", "\ r", "\ n"), '
', stripslashes ($ str));

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

 Смежные вопросы

  • Нет связанных вопросов^_^