2011-07-22 24 views

答えて

6

スクリプトレットとtaglibs/ELを混在させたくありません。それらは同じ範囲で実行されません。

すべてのリクエストヘッダーは、暗黙的にマップされたオブジェクト${header}によって利用可能です。 user-agentヘッダー名には-という特殊文字が含まれているため、${header.user-agent}が期待どおりに機能しないため、引用符で囲んだ中かっこ表記[]を使用する必要があります。

${header['user-agent']} 

だから、これは実行する必要があります。

<c:choose> 
    <c:when test="${fn:contains(header['user-agent'], 'Gecko')}"> 
     You're pretending to use a Gecko based browser. 
    </c:when> 
    <c:when test="${fn:contains(header['user-agent'], 'MSIE')}"> 
     You're pretending to use a MSIE based browser. 
    </c:when> 
    <c:when test="${fn:contains(header['user-agent'], 'Webkit')}"> 
     You're pretending to use a Webkit based browser. 
    </c:when> 
    <c:otherwise> 
     It's not clear which browser you're pretending to use. 
    </c:otherwise> 
</c:choose> 

無関係を問題に:この方法は、コードのにおいであるユーザエージェントヘッダをチェックします。ユーザーエージェントのヘッダーはクライアントによって完全に制御されており、簡単に全く異なる値になりすますことができます(上記のコード例では "偽装"という言葉を使用しています)。実際の機能要件を正しく解決するには、実際の機能要件についてもう少し詳しく説明したいと思います。

たとえば、JavaScriptではブラウザ検出よりもfeature detectionを選択する必要があります。

メディアタイプに基づいて特定のスタイルシートをロードする場合は、media attributeを使用する必要があります。例えば。

<link rel="stylesheet" href="screen.css" media="screen,projection,tv" /> 
<link rel="stylesheet" href="smartphone.css" media="only screen and (max-device-width:480px)"/> 
<link rel="stylesheet" href="handheld.css" media="handheld" /> 
<link rel="stylesheet" href="print.css" media="print" /> 

それとも、エンドユーザーにユーザーエージェントヘッダーで見つかった情報のユーザーフレンドリーな要約を提示したいとき、あなたの代わりに、このようなhttp://user-agent-string.info/として別のサービスを利用したいと思います。彼らはまた、Java API exampleを提供しています。

+0

コードのにおいはどういう意味ですか?これは、ユーザーエージェントとしてiphone/Androidを検出し、これらのモバイルプラットフォーム向けのスタイルシートを注入するための良い方法のように思えました。あなたは何か違うものをお勧めしますか? – jrutter

+0

ありがとうございます。私は最初にスタイルシートのアプローチを試みます。 – jrutter

+0

答えを更新しました。この例の 'smartphone.css'はiPhone/Androidに必要なものでなければなりません。 – BalusC

関連する問題