0

私の .jsp では、クライアントのブラウザに依存して使用する .css クラスまたは属性を定義するために、User-Agent を使用することがあります。

例:

<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 をそのように定義する必要があります。

そうすれば、今のところ問題ありません。しかし、別のより適切で安定した方法があると思います。なぜなら、すべてのブラウザーの 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)

それはより安定した代替手段ですか?

4

2 に答える 2

1

コード(ここではjsp)で切り替えを行う代わりに、cssファイルを読み取るときに切り替えることができます。

あなたは得るでしょう:

  • ページごとに1つの条件付きのみ
  • スイッチをページ内ではなくサーブレットフィルターとして実装できるため、すべてのページに共通である可能性があります。

あなたは持っているでしょう:

  • すべてのブラウザに適用される1つのcss
  • ブラウザごとに1つの特定のcss。
于 2009-10-07T12:22:47.827 に答える
1

Jquery のようなライブラリを使用してブラウザを検出してみてください。これには検出機能が組み込まれており、車輪の再発明を回避することで、作業がずっと楽になります。

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

また、Yahoo YUI ライブラリもチェックしてください。そこには、ブラウザ間でエクスペリエンスを標準化するのに役立つ CSS 関連のツールがたくさんあります。 http://developer.yahoo.com/yui/reset/

于 2009-10-09T07:28:57.613 に答える