2012-04-14 2 views
2

Почему я получаю ...незавершенная строка/Неверная или неожиданный маркер

SyntaxError: unterminated string literal

... в Firefox и ...

Uncaught SyntaxError: Invalid or unexpected token

... в Chrome когда я бегу ...

$(document).ready(function() { 
 
    function addJSBeforeEndBody(code) { 
 
     $('body').append('<script>' + code + '</script>'); 
 
    } 
 
    addJSBeforeEndBody('$(document).ready(function() { console.log("I never end up here."); });'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Вы упускаете закрытие скобку к вашим Append) вызов (. – kinakuta

+1

http://blogs.msdn.com/b/oldnewthing/archive/2006/06/05/617901.aspx – DCoder

+0

У меня есть ');' в конце append() ... – Eric

ответ

8

Разбить строку "</script>" (в javascript-коде); он будет интерпретироваться как фактический тег закрывающего скрипта, а не строковый литерал, который вы собираетесь использовать.

$(document).ready(function() { 
 
    function addJSBeforeEndBody(code) { 
 
     $('body').append('<script>' + code + '</scr' + 'ipt>'); 
 
    } 
 
    addJSBeforeEndBody('$(document).ready(function() { console.log("It works now."); });'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

Ах, я помню этот вопрос , Хороший звонок! –

+0

Да, это файл html. Что значит сломать слово «скрипт»? – Eric

+1

@ Эрик Я имею в виду именно это; вы не можете иметь буквенный '' '' в файле HTML, если это не фактический тег литерала. Используйте '' "' или '" <\/script> "или что-то еще, что не' '". –

1
'<script>'+code.toString()+'<\/script>' 

Браузер закрывает элемент сценария, когда он видит '</script>', указав скрипт закрывающий тег. Выключение косой черты позволяет браузеру работать в режиме интерпретации текста.

Или ломки, как упоминался:

"<script>"+code.toString()+"<"+"/script>" 
Смежные вопросы