将渲染的html传递给javascript函数

时间:2010-09-22 10:23:02

标签: javascript html jsp jstl el

我在服务器端渲染了一些html代码。这被传递给一个jsp,它用这个html呈现一个javascript调用:

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

内容就像

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

我的问题是 - 根据'内容'中的引用 - javascript调用错误,因为它被呈现为

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

有谁知道如何解决这个问题(除了手动更换所有报价)?

4 个答案:

答案 0 :(得分:0)

使用JSON编码器创建编码字符串。

但是你还必须确保输出不包含字符串文字中的序列</,这在<script>块中是无效的(</script是版本也会破坏浏览器。)

默认情况下,许多JSON编码器可选择编码为<\/\u003C/以避免此问题。

答案 1 :(得分:0)

我用这个:

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

这似乎完美无缺

答案 2 :(得分:0)

您在这里没有使用JSTL(您最初只使用JSTL标记了问题)。您正在模板文本中使用EL。它按原样打印。您希望使用JSTL核心<c:out>来转义predefined XML entities(在此特定情况下也适用于HTML,引号属于转义的XML实体)。

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

另一种选择(如果你讨厌JSP语法高亮显示或验证器有关嵌套标签/引号的错误/ jerks)是JSTL函数fn:escapeXml()

window.parent.${param.popup_return}("${fn:escapeXml(helpId)}", "${fn:escapeXml(content)}");

答案 3 :(得分:0)

您是否尝试过使用单引号而不是双引号?即将"${content}"更改为'${content}'