2009-10-07 37 views
0

有时在我的.jsp中,我使用User-Agent来定义依赖客户端浏览器使用的.css类或属性。用户代理在.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> 

条件句的有效期仅为IE,所以对于各种浏览器,我应该定义用户代理这样的方式。

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

的Safari 4检测为:Mozilla的/ 5.0(视窗; U; Windows NT的5.1;恩-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)

是更稳定的替代方案吗?

回答

1

而不是在你的代码(这里是jsp)中进行切换,你可以在读取css文件时做到这一点。

您将获得:

每页
  • 只有一个条件
  • 可能性来实现交换机作为一个Servlet过滤器而不是在页面上,因此它可能是通用的所有网页。

你必须:

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