Преобразование / экранирование кода Javascript в строку для размещения на странице HTML - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть некоторый Javascript-код, который необходимо динамически создать в виде строки и затем «передать» на страницу с помощью функции JScript.

например, включить это:

<script type="text/javascript">
var so_id = new SWFObject("url", "so_id", 600, 400, "7", "#FFFFFF");
</script>

Вthis:

var retString = '<script type="text/javascript">\n'
+ 'var so_' + id + ' = new SWFObject("' 
+ url + '", "' + id + '", ' + width
+ ', ' + height + ', ' + player + ', "#FFFFFF");\n'
+ '</script>\n';

Я ищу простой способ превратить первый бит кода в строку, как в нижнем примере.Любые кавычки и т. Д. Должны быть экранированы.

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

В данный момент я избегаю всего вручную, но это довольно трудоемкий процесс.начать с синтаксического анализатора на основе JS / HTML-форм, но задался вопросом, слышал ли кто-нибудь в SO что-либо подобное, описанное?

EDIT
Бит фона:

Мы используем пакет для создания онлайн-опросов под названием ConfirmIt, который использует JScript для добавления дополнительных функций (логика / упорядочение вопросов и т. Д.).Чтобы получить JavaScript на страницу, мы скомпилируем String, используя функцию JScript, как описано выше, и затем она «загружается» на страницу при загрузке.Это означает, что у меня достаточно ограниченный набор инструментов для использования, поэтому вам необходимо принять это во внимание при ответе.

РЕДАКТИРОВАТЬ 2

Iнаписал утилиту JavaScript для этого с переключателем для переключения между одинарными и двойными кавычками.Пока только один набор кавычек используется последовательно, вам не нужно беспокоиться о динамическом экранировании 2 наборов.

Ответы [ 3 ]

1 голос
/ 07 апреля 2011

Это превратит этот код в строку:

<script src="http://code.jquery.com/jquery-1.5.2.min.js"></script>
<script id="test" type="text/javascript">
var x = "asfasfasfsdsadf";
function xyz() {
    alert("Hello world");
}
</script>
<script type="text/javascript">
$(function() {
    alert( $("#test").text());
});
</script>

Хотя вам может понадобиться пробел вместо табуляции.Когда я попробовал это в Chrome, он показывал вкладки как специальные символы;У Firefox не было проблем.

1 голос
/ 25 января 2012

Это сработало хорошо для меня

<script type="text/javascript">
function main(){
var a;
}

alert(main.valueOf());
</script>
1 голос
/ 07 апреля 2011

Могу ли я предположить, что вы делаете что-то с Ajax и пытаетесь динамически запустить javascript, внедрив его в страницу в какой-то момент?

Если это так, то вы можете взглянуть на JSONP (JSON с Padding). Ваш серверный скрипт может возвращать вызов функции, который запускается в браузере, когда вы его получаете, в основном просто обратный вызов.

Если у меня неправильный конец флешки, то предоставьте немного больше контекста, и я еще раз посмотрю на него:)

Приветствия

Пит

...