3

升级到 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 版本有关。有关如何解决此问题或解决此问题的任何想法?

4

1 回答 1

5

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

有效的(现代)语法是:

<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>

顺便说一句,更好的方法是将 JS 代码放在它自己的.js文件中。

也可以看看:

于 2013-09-17T13:50:48.350 回答