【问题标题】:jsf and javascript, are incompatible?jsf和javascript不兼容?
【发布时间】:2013-01-26 18:47:44
【问题描述】:

我正在将一个 html 迁移到 jsf 文件,但是一个脚本失败了,该脚本在安装在 wamp 服务器中的 html 中运行。

代码:

> <h:head>
>         <meta charset="utf-8"/>
>         <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
>         <title></title>
>         <meta name="description" content=""/>
>         <meta name="viewport" content="width=device-width, initial-scale=1"/>
>         <link rel="stylesheet" href="../css/media-queries.css" media="screen" />
>         <script type="" src="../js/vendor/modernizr.2.6.2.min.js"></script>
>         <script type="" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
>         <script type="text/javascript">window.jQuery || document.write('<script
> src="../js/vendor/jquery-1.8.0.min.js"><\/script>')</script> <!--  This is the line 21 -->
>         <script type="" src="../js/jquery.mobile.min.js"></script>
>         <script type="" src="../js/jquery.dataTables.min.js"></script>
>         <script type="" src="../js/jquery.formCharmer.js"></script>
>         <script type="">if(Modernizr.csstransitions){document.write('<link
> rel="stylesheet" href="../css/charmerAnimation.css"/>')}</script>
>         <!--[if (gte IE 6)&(lte IE 8)]>
>             <script src="../js/selectivizr.min.js"></script>
>         <![endif]-->
>         <!--[if lte IE 9]>
>             <script src="../js/css3-mediaqueries.js"></script>
>         <![endif]-->
>     </h:head>

错误:

HTTP 状态 500 - 解析 /content/contentA.xhtml 时出错:错误 Traced[line: 21] 元素的内容必须由数据标记组成 或正确的格式。

这是 HTML 代码:

<head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <title></title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="../css/media-queries.css" media="screen" />
        <script src="../js/vendor/modernizr.2.6.2.min.js"></script>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
        <script>window.jQuery || document.write('<script src="../js/vendor/jquery-1.8.0.min.js"><\/script>')</script>
        <script src="../js/jquery.mobile.min.js"></script>
        <script src="../js/jquery.dataTables.min.js"></script>
        <script src="../js/jquery.formCharmer.js"></script>
        <script>if(Modernizr.csstransitions){document.write('<link rel="stylesheet" href="../css/charmerAnimation.css">')}</script>     
        <!--[if (gte IE 6)&(lte IE 8)]>
            <script src="../js/selectivizr.min.js"></script>
        <![endif]-->
        <!--[if lte IE 9]>
            <script src="../js/css3-mediaqueries.js"></script>
        <![endif]-->
    </head>

【问题讨论】:

  • 可能需要分解 document.write 中的 &lt;script&gt; 标签。例如'&lt;scri' + 'pt&gt;' 防止内部“标签”泄漏到主上下文中。
  • 您应该在包含&lt;&gt;&amp; 符号的JS 代码中使用CDATA 块,如here 所示
  • /* / and / ]]> */,工作,坦克。

标签: javascript jsf


【解决方案1】:

Facelets 是一种基于 XML 的视图技术。 &amp;lt;&amp;gt; 在 XML 中是 reserved characters,表示元素的开始和结束。但是,您尝试将其作为 JavaScript 字符串变量的一部分输出。您需要将它们表示为 &amp;lt;&amp;gt;

<script>window.jQuery || document.write('&lt;script src="../js/vendor/jquery-1.8.0.min.js"&gt;&lt;\/script&gt;')</script>

这同样适用于代码中更下方的&amp; 字符,它表示实体的开始。顺便说一句,一旦你解决了这个问题,IE 条件注释就有了一个新问题,这里得到了回答:<!--[if IE]> conditional comments are rendered HTML-escaped in Facelets

【讨论】:

    猜你喜欢
    • 2015-02-06
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2021-01-15
    相关资源
    最近更新 更多