.jsp中User-Agent的替代方案

时间:2009-10-07 12:18:26

标签: jsp browser user-agent

有时在我的.jsp中,我使用User-Agent来定义依赖于客户端浏览器的.css类或属性。

示例:

<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>

条件仅对IE有效,因此对于各种浏览器,我应该这样定义User-Agent。

这样工作现在好了。 但我认为还有另一种更优雅或稳定的方式,因为每个浏览器的用户代理定义非常复杂,我们计划进一步支持移动浏览器。

Safari 4检测为:Mozilla / 5.0(Windows; U; Windows NT 5.1; en-US)AppleWebKit / 528.16(KHTML,类似Gecko)版本/ 4.0 Safari / 528.16
IE 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; .NET CLR 2.0.50727)

它是否更稳定替代?

2 个答案:

答案 0 :(得分:1)

您可以在阅读css文件时执行此操作,而不是在代码中进行切换(此处为jsp)。

你会获得:

  • 每页只有一个条件
  • 可以将交换机实现为Servlet过滤器,而不是在页面中,因此它可以是所有页面的通用。

你会:

  • 适用于所有浏览器的一个css
  • 每个浏览器一个特定的CSS。

答案 1 :(得分:1)

尝试使用像Jquery这样的库来检测浏览器,它可以检测到它,并且通过避免重新启动轮子,它将使您的生活更轻松。

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

另外要检查的是Yahoo YUI库,有很多CSS相关工具可以帮助标准化跨浏览器的体验。 http://developer.yahoo.com/yui/reset/