我正在使用 OmniFaces conditionalComment 加载 IE 6 浏览器的 javascript 文件。在网站上,它说脚本应该包含在页面中,如下所示:
<script type="text/javascript" src="[JS library]"></script>
<!--[if (gte IE 6)&(lte IE 8)]>
<script type="text/javascript" src="selectivizr.js"></script>
<noscript><link rel="stylesheet" href="[fallback css]" /></noscript>
<![endif]-->
这不是有效的 xml,因此不能在 JSF xhtml 文件中使用。相反,我使用这个:
<h:body>
<f:facet name="last">
<o:conditionalComment if="if (gte IE 6)&(lte IE 8)">
<h:outputScript library="js" name="selectivizr-min.js" target="head"/>
</o:conditionalComment>
</f:facet>
...
</h:body>
我将脚本包含在 xhtml 的主体部分中,并将其放在 Facet name="last" 中,因此它包含在 JQuery 之后(我使用 PirmeFaces 并阅读这是最安全的方法)。 target="head" 确保将其写入生成的 html 文件的 head 部分。脚本的链接包含在文档的正确部分中(在 PrimeFaces 导入之后),但没有被条件注释包围。
这是 html 的相关部分(为了更容易阅读而重新格式化):
<head>
<link type="text/css" rel="stylesheet" href="/javax.faces.resource/theme.css.xhtml?ln=primefaces-aristo" />
<link type="text/css" rel="stylesheet" href="/javax.faces.resource/primefaces.css.xhtml?ln=primefaces&v=5.1" />
<script type="text/javascript" src="/javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces&v=5.1"></script>
<script type="text/javascript" src="/javax.faces.resource/primefaces.js.xhtml?ln=primefaces&v=5.1"></script>
<script type="text/javascript" src="/javax.faces.resource/jquery/jquery-plugins.js.xhtml?ln=primefaces&v=5.1"></script>
<script type="text/javascript" src="/javax.faces.resource/omnifaces.js.xhtml?ln=omnifaces"></script>
<link type="text/css" rel="stylesheet" href="/javax.faces.resource/styles.css.xhtml?ln=css" />
<script type="text/javascript" src="/javax.faces.resource/selectivizr-min.js.xhtml?ln=js"></script>
最后一行缺少注释 (!--[if (gte IE 6)&(lte IE 8)]> ...)。
我究竟做错了什么?有什么建议么?
干杯,
多米尼克
这个问题有两个方面:
The <f:facet name="last">
在这种情况下没有任何意义。摆脱它。它将被忽略,包括它的任何子级。仅在内部有效<h:head>
(即使如此,只有当您使用 PrimeFaces 时;他实际上忽略了本机 JSF 最后订购头部资源的可能性)。
你不能使用<h:outputScript>
(nor <h:outputStylesheet>
inside <o:conditionalComment>
,因为 JSF 会隐式地将其自动重定位到<head>
。这在文中也有所暗示文档 and showcase.
只需使用普通香草<script>
(or <link rel="stylesheet">
).
<o:conditionalComment if="(gte IE 6)&(lte IE 8)">
<script src="#{resource['js/selectivizr-min.js']}" />
</o:conditionalComment>
请注意,我修复了无效的if
通过删除重复的属性值if
.
无关针对具体问题:library="js"
表示对以下内容的误解library
属性。仔细阅读JSF 资源库的用途是什么?应该如何使用它? The #{resource}
上面答案中的解析器已更改为使用js
作为常规文件夹而不是库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)