Как использовать условные комментарии Internet Explorer в JSF?
Это мой исходный код в Eclipse:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
</body>
</html>
Когда я рассматриваю это в IE9, он отображает текст:
<!--[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]-->
Если я рассматриваю источник, он говорит:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
</body>
</html>
Любая причина, по которой источник изменился после обслуживания сервлетом Faces?
Ответы
Ответ 1
Известная проблема, JSF-рендеринг избегает комментариев. Вы можете решить эту проблему, используя <h:outputText escape="false">
и HTML-объекты. Вы также можете использовать OmniFaces <o:conditionalComment>
, чтобы решить проблему лучше. См. также сайт витрины:
<o:conditionalComment>
выполняет условный комментарий. Условные комментарии - это особенность, специфичная для IE, которая позволяет разработчику выделять блоки комментариев HTML в зависимости от того, использует ли клиент IE, и если да, то какая версия. Они часто видны в сочетании с таблицами стилей CSS, например:
<!--[if lte IE 7]>
<link rel="stylesheet" href="ie6-ie7.css" />
<![endif]-->
Тем не менее, Facelets отображает содержимое комментария, выведенное HTML, что делает его непригодным.
<!--[if lte IE 7]>
<link rel="stylesheet" href="ie6-ie7.css" />
<![endif]-->
Кроме того, если параметр javax.faces.FACELETS_SKIP_COMMENTS
context равен true
, то он даже не будет отображаться вообще. Вам нужно будет обходиться с уродливым <h:outputText escape="false">
.
<h:outputText
value="<!--[if lte IE 7]><link rel="stylesheet" href="ie6-ie7.css" /><![endif]-->"
escape="false" />
Этот компонент предназначен для решения этой проблемы.
<o:conditionalComment if="lte IE 7">
<link rel="stylesheet" href="ie6-ie7.css" />
</o:conditionalComment>
Обратите внимание, что вы не можете использовать это с <h:outputStylesheet>
, поскольку он неявно будет перемещен как прямой дочерний элемент <h:head>
.
Ответ 2
Это работает:
<h:outputText escape="false" value="<!--[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]-->"></h:outputText>
Ответ 3
Я использовал f: verbatim, намного более чистым.
Например
<f:verbatim>
<!--[if gte IE 8]>
<script type="text/javascript">
//<![CDATA[
/** Javascript **/
//]]>
</script>
<![endif]-->
</f:verbatim>
Ссылка на основной тезис JSF
Примечание. Этот тег устарел с JSF 2.0 (декабрь 2009 г.). Он предназначен только для JSP