Передача рендеринга HTML в функцию JavaScript - PullRequest
0 голосов
/ 22 сентября 2010

У меня есть HTML-код, отображаемый на стороне сервера. Это передается в jsp, который выполняет вызов javascript с этим html:

<script type="text/javascript">
    window.parent.${param.popup_return}("${helpId}", "${content}");
</script>

содержание похоже на

"
This is a <p class="xyz">test</p>
"

Моя проблема в том, что - согласно кавычкам в 'content' - неправильный вызов javascript, поскольку он отображается в

<script type="text/javascript">
    window.parent.${param.popup_return}("ybc", "This is a <p class="xyz">test</p>");
</script>

Кто-нибудь знает, как я могу решить эту проблему (кроме ручной замены всех кавычек)?

Ответы [ 4 ]

0 голосов
/ 22 сентября 2010

Вы пытались использовать одинарные кавычки вместо двойных? то есть изменение "${content}" на '${content}'

0 голосов
/ 22 сентября 2010

Я использую это:

<div id="result" style="display:none">
  ${content}
</div>
<script type="text/javascript">
  window.parent.${param.popup_return}("${helpId}", dojo.byId("result").innerHTML);
</script>

Кажется, это прекрасно работает

0 голосов
/ 22 сентября 2010

Вы не используете JSTL здесь (вы изначально пометили вопрос только JSTL). Вы используете EL в тексте шаблона. Он печатается как есть. Вы хотели бы использовать ядро ​​JSTL <c:out> для экранирования предопределенных сущностей XML (что также работает для HTML в данном конкретном случае, кавычки входят в число экранированных сущностей XML).

window.parent.${param.popup_return}("<c:out value="${helpId}" />", "<c:out value="${content}" />");

Альтернативой (если вы ненавидите, чтобы подсветка синтаксиса JSP или валидаторы ошибались / дергали вложенные теги / кавычки), это функция JSTL fn:escapeXml():

window.parent.${param.popup_return}("${fn:escapeXml(helpId)}", "${fn:escapeXml(content)}");
0 голосов
/ 22 сентября 2010

Используйте JSON-кодировщик для создания закодированных строк.

Но вы также должны убедиться, что вывод не содержит последовательность </ в строковых литералах, что недопустимо в <script> block (</script - это версия, которая также нарушает работу браузеров).

Многие кодировщики JSON либо по умолчанию, либо при желании будут кодировать в <\/ или \u003C/, чтобы избежать этой проблемы.

...