我正在使用 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)]> ...)。
我做错了什么?有什么建议吗?
干杯, 多米尼克
最佳答案
这个问题有两个方面:
<f:facet name="last">
在这种情况下没有任何意义。摆脱它。它将被忽略,包括它的任何子级。仅在<h:head>
内有效(即使如此,只有当您使用 PrimeFaces 时;谁实际上忽略了 native JSF 将头资源排序为最后的可能性)。您不能使用
<h:outputScript>
(也不是<h:outputStylesheet>
内的<o:conditionalComment>
,因为 JSF 会隐式地将其自动重定位到<head>
。这也在 documentation 和 showcase 中暗示。
只需使用普通 Vanilla <script>
(或<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
的误解属性。仔细阅读What is the JSF resource library for and how should it be used? #{resource}
上述答案中的解析器已更改为使用 js
作为常规文件夹而不是库。
关于jsf - OmniFaces 条件注释未写入 HTML 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26719135/