Как сделать компонент в зависимости от типа браузера? - PullRequest
2 голосов
/ 11 октября 2011

У меня есть веб-приложение, в котором есть определенные компоненты, которые не должны отображаться, если браузер Internet Explorer.

Технически я могу использовать jquery, но я предполагаю, что это не очень хорошо, потому что это код на стороне клиента, а визуализированный атрибут вычисляется на сервере.

Как я могу это сделать?

Ответы [ 3 ]

8 голосов
/ 11 октября 2011

Вы можете проверить, содержит ли заголовок User-Agent строку MSIE.Вот обзор всех «допустимых» строк заголовка MSIE: http://www.useragentstring.com/pages/Internet%20Explorer/ Вы увидите, что все строки MSIE имеют один и тот же шаблон "; MSIE ".Вы можете проверить это:

<h:someComponent rendered="#{!header['User-Agent'].contains('; MSIE ')}">

или если вы еще не используете Servlet 3.0 / EL 2.2:

<h:someComponent rendered="#{!fn:contains(header['User-Agent'], '; MSIE ')}">

Однако вы должны знать, что это контролируется клиентомзначение и может быть легко изменено / подделано.Выполнение проверок на стороне клиента с использованием, например, условных комментариев гораздо надежнее, поскольку MSIE действительно является браузером only , который их интерпретирует.

2 голосов
/ 11 октября 2011

Если вы можете избежать этого, я бы посоветовал не пытаться делать конкретные вещи для конкретного браузера. Особенно на стороне сервера, единственный способ определить браузер - это строка user-agent, но это ненадежно - некоторые пользователи могут подделать ее, другие могут использовать программное обеспечение для обеспечения конфиденциальности или прокси-сервер, который полностью ее скрывает. Таким образом, вы действительно не можете быть уверены в браузере на стороне сервера.

Гораздо удобнее предоставлять один и тот же код всем браузерам, а затем определять функции в самом браузере, чтобы определить, какие функции браузера доступны.

Хорошим сценарием обнаружения функций является Modernizr . Вы можете использовать это для настройки вашего сайта в соответствии с возможностями браузера.

В случае IE версии 8 и более ранних, есть несколько случаев, когда Modernizr не достаточно, и вам просто нужно сделать что-то другое для этого браузера, чтобы обойти его ошибки. В этом случае я рекомендую использовать Условные комментарии в своем HTML-коде для вставки кода, специфичного для IE. Условные комментарии - это функция, которая поддерживается только в IE и позволяет также указывать конкретные версии, поэтому она идеально подходит для взлома решения, позволяющего решить проблему, связанную с IE.

0 голосов
/ 23 апреля 2015

Вы можете сохранить параметр следующим образом:

<ui:param name="isIE8" value="#{!header['User-Agent'].matches('.*; MSIE [2-8]\\.0.*')}"/>

И затем условно отобразить некоторый код.

С JSF 1.2 и ванильным HTML (без компонентов JSF) вы можете использовать:

<f:verbatim rendered="#{isIE8}">
    Here is the code for old versions IE, without HTML5, for example
</f:verbatim>
<f:verbatim rendered="#{!isIE8}">
    Here is the code for other browsers
</f:verbatim>

Для JSF 2.0, 2.2 или для кода, содержащего компоненты JSF или EL, используйте:

<ui:fragment rendered="#{isIE8}">
    etc. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...