升级到Mojarra 2.2.3后,我发现了一些奇怪的行为。以下Javascript声明被破坏:
在.xhtml文件中:
<script type="text/javascript">
<!-- /* <![CDATA[ */
$(document).ready(function() {
if ($('#some_identifier').size() > 0)
...
/* ]]> */-->
</script>
这被误导成以下废话:
<script type="text/javascript">
<!-- /* <![CDATA[ */
$(document).ready(function() {
if ($('#some_identifier').size() > 0)
...
/* ]]> */-->
</script>
这会破坏.xhtml文件中嵌入的所有javascript代码。我确认我们之前使用的版本(2.0.x)不会发生这种情况,因此我必须假设它与新的Mojarra版本有关。关于如何解决这个问题或解决它的任何想法?
答案 0 :(得分:4)
此CDATA语法完全无效。目前尚不清楚你从哪里得到这个,为什么你认为它是有效的。也许你把它与CSS代码的CDATA语法混淆了。在任何情况下,对于JS代码中的正确CDATA语法,请仔细阅读此Mozilla开发人员网络文章:Writing JavaScript for XHTML。
有效(现代)语法是:
<script type="text/javascript">
<![CDATA[
$(document).ready(function() {
if ($('#some_identifier').size() > 0)
...
]]>
</script>
如果您确实需要支持世界上没有人使用的旧浏览器,那么请使用以下语法,这些语言应该适用于那些本身不支持JavaScript的浏览器,因此无法解析<script>
元素(不管你自己,你的JSF应用程序,丰富的JavaScript,仍然可以在那些webbrowsers上运行吗?为它们逃脱JS真的有用吗?)
<script type="text/javascript">
<!--//--><![CDATA[//><!--
$(document).ready(function() {
if ($('#some_identifier').size() > 0)
...
//--><!]]>
</script>
顺便说一句,很多更好的是将JS代码放在自己的.js
文件中。