JSF 2.2 CDATA 被转义

2024-04-06

升级到 Mojarra 2.2.3 后我发现了一些奇怪的行为。以下 Javascript 声明被破坏:

在 .xhtml 文件中:

<script type="text/javascript">
<!-- /* <![CDATA[ */
    $(document).ready(function() {                                                                             
        if ($('#some_identifier').size() > 0) 
        ...
/* ]]> */-->
</script>

这被扭曲成以下废话:

<script type="text/javascript">
<!-- /* &lt;![CDATA[ */
    $(document).ready(function() {
        if ($('#some_identifier').size() &gt; 0)
        ...
/* ]]&gt; */-->
</script>

这会破坏 .xhtml 文件中嵌入的所有 javascript 代码。我验证了我们之前使用的版本(2.0.x)不会发生这种情况,所以我必须假设它与新的 Mojarra 版本有关。关于如何解决此问题或解决此问题有什么想法吗?


此 CDATA 语法完全无效。目前尚不清楚你从哪里得到这个以及为什么你认为它是有效的。也许您将它与 CSS 代码的 CDATA 语法混淆了。无论如何,要了解 JS 代码中正确的 CDATA 语法,请仔细阅读这篇 Mozilla 开发者网络文章:为 XHTML 编写 JavaScript https://developer.mozilla.org/en/docs/Writing_JavaScript_for_XHTML.

有效的(现代)语法是:

<script type="text/javascript">
  <![CDATA[
    $(document).ready(function() {                                                                             
      if ($('#some_identifier').size() > 0) 
        ...
  ]]>
</script>

如果你真的真的需要支持世界上没有人使用的旧浏览器,那么使用以下语法,它应该适用于那些本身不支持 JavaScript 的浏览器,因此无法解析<script>元素(想知道,您的 JSF 应用程序富含 JavaScript,是否仍然可以在 Web 浏览器上运行?为它们转义 JS 真的有用吗?)

<script type="text/javascript">
  <!--//--><![CDATA[//><!--
    $(document).ready(function() {                                                                             
      if ($('#some_identifier').size() > 0) 
        ...
  //--><!]]>
</script>

顺便一提,much更好的方法是将 JS 代码放在自己的代码中.js file.

也可以看看:

  • 解析 XHTML 时出错:元素的内容必须由格式正确的字符数据或标记组成 https://stackoverflow.com/questions/4338538/error-parsing-xhtml-the-content-of-elements-must-consist-of-well-formed-charact/4338816#4338816
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSF 2.2 CDATA 被转义 的相关文章

随机推荐