【问题标题】:Passing rendered html to a javascript function将呈现的 html 传递给 javascript 函数
【发布时间】:2010-09-22 10:23:01
【问题描述】:

我在服务器端呈现了一些 html 代码。这被传递给一个jsp,该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>

有谁知道我该如何解决这个问题(除了手动替换所有引号)?

【问题讨论】:

  • 我担心转义引号会出现在任何解决方案中。

标签: javascript html jsp jstl el


【解决方案1】:

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

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

许多 JSON 编码器默认或可选地编码为 &lt;\/\u003C/ 以避免此问题。

【讨论】:

    【解决方案2】:

    我用这个:

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

    这似乎很完美

    【讨论】:

      【解决方案3】:

      您在这里没有使用 JSTL(您最初只用 JSTL 标记了问题)。您在模板文本中使用 EL。它按原样打印。您想使用 JSTL 核心 &lt;c:out&gt; 转义 predefined XML entities(在这种特殊情况下也适用于 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)}");
      

      【讨论】:

        【解决方案4】:

        你试过用单引号代替双引号吗?即将"${content}"更改为'${content}'

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-29
          • 2015-08-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多