JSF 2.2 CDATA 被转义

Ion*_*chy 3 facelets cdata jsf-2 jsf-2.2

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

在 .xhtml 文件中:

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

这被混淆成以下废话:

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

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

Bal*_*usC 5

此 CDATA 语法完全无效。不清楚你从哪里得到这个以及为什么你认为它是有效的。也许您将其与 CSS 代码的 CDATA 语法混淆了。在任何情况下,为了在 JS 代码中使用正确的 CDATA 语法,请仔细阅读 Mozilla 开发人员网络的这篇文章:为 XHTML 编写 JavaScript

有效的(现代)语法是:

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

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

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

顺便说一句,很多更好的是把那个JS代码在自己的.js文件。

也可以看看: