2009-10-07 3 views
0

Иногда в моем .jsp я использую User-Agent для определения того, какой класс или атрибут .css следует использовать в зависимости от браузера клиента.Альтернатива User-Agent в .jsp

пример:

<c:set var="browser" value="${header['User-Agent']}" scope="session"/> 

     <c:if test="${(fn:contains(browser,'Safari'))||(fn:contains(browser,'Chrome'))}"> 
      <c:set var="cellClass" value="cell-nonFF"/> 
     </c:if> 

     <c:if test="${(fn:contains(browser,'Safri') == false)&&(fn:contains(browser,'MSIE') == false)}"> 
      <c:set var="cellClass" value="cell-FF"/> 
     </c:if> 

     <c:if test="${fn:contains(browser,'MSIE')}"> 
      <c:set var="cellClass" value="cell-IE"/> 
     </c:if> 

Conditionals действительны только для IE, так и для различных браузеров, я должен определить User-Agent таким образом.

так как работа на данный момент OK. Но я полагаю, что есть еще один более изящный или стабильный способ, потому что определение User-Agent для каждого браузера очень неоднозначное, и мы планируем дополнительно поддерживать мобильные браузеры.

Сафари 4 определяется как: Mozilla/5.0 (Windows; U; Windows NT 5.1; EN-US) AppleWebKit/528,16 (KHTML, как Gecko) Версия/4.0 Сафари/528,16
И.Е. 6 обнаружен как :: Mozilla/4.0 (совместимый; MSIE 6.0; Windows NT 5.1; SV1; iOpus-IM; Mozilla/4.0 (совместимый; MSIE 6.0; Windows NT 5.1; SV1); InfoPath.1; .NET CLR 1.1.4322; CLR 2.0.50727)

Является ли это более стабильной альтернативой?

ответ

1

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

http://docs.jquery.com/$.browser.name

Также что-то, чтобы проверить, является библиотека Yahoo YUI, есть много инструментов, связанных с CSS, чтобы помочь стандартизировать опыт во всех браузерах. http://developer.yahoo.com/yui/reset/

1

Вместо того чтобы делать переключатель в вашем коде (здесь jsp), вы можете сделать это, когда будете читать файл css.

Вы получили бы:

  • только одна условных на страницу
  • Возможности реализовать переключатель как Servlet фильтр, а не в странице, поэтому он может быть общим для всех страниц.

Вы бы:

  • один CSS, который применяется для всех браузеров
  • один конкретный CSS в браузере.
Смежные вопросы