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">
<!-- /* <![CDATA[ */
$(document).ready(function() {
if ($('#some_identifier').size() > 0)
...
/* ]]> */-->
</script>
Run Code Online (Sandbox Code Playgroud)
这会破坏 .xhtml 文件中嵌入的所有 javascript 代码。我确认我们之前使用的版本 (2.0.x) 不会发生这种情况,所以我必须假设它与新的 Mojarra 版本有关。关于如何解决此问题或解决此问题的任何想法?
此 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文件。
| 归档时间: |
|
| 查看次数: |
5989 次 |
| 最近记录: |