2009-10-07 36 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。