2011-10-11 4 views

답변

7

User-Agent 헤더에 MSIE 문자열이 포함되어 있는지 확인할 수 있습니다. 다음은 "유효한"MSIE 헤더 문자열의 개요입니다. http://www.useragentstring.com/pages/Internet%20Explorer/ 모든 MSIE 문자열은 동일한 패턴 "; MSIE "을 공유합니다. 당신은에서 확인할 수 있습니다 :

<h:someComponent rendered="#{!header['User-Agent'].contains('; MSIE ')}"> 

또는 당신은 서블릿 3.0에없는 경우/아직 EL 2.2 : 당신은 그러나이 클라이언트 제어 값이고 쉽게 것을 인식 할 필요가

<h:someComponent rendered="#{!fn:contains(header['User-Agent'], '; MSIE ')}"> 

변경되거나 스푸핑 될 수 있습니다. 예를 들어 조건부 주석을 사용하여 클라이언트 측에서 수표를 처리하는 것은 MSIE가 실제로는 브라우저 만 해석하므로 훨씬 신뢰할 수 있습니다.

2

당신이 그것을 피할 수 있다면, 나는 특정 브라우저를 위해 특정 물건을하려고하지 않는 것이 좋습니다. 특히 서버 측에서 브라우저를 확인하는 유일한 방법은 user-agent 문자열이지만 신뢰할 수는 없습니다. 일부 사용자는 스푸핑 할 수 있고 다른 사용자는 개인 정보 보호 소프트웨어 또는 프록시를 사용하여 전체를 비울 수 있습니다. 따라서 서버 측에서 실제로 브라우저를 확신 할 수는 없습니다.

동일한 코드를 모든 브라우저에 제공 한 다음 브라우저에서 기능 감지를 수행하여 사용 가능한 브라우저 기능을 확인하는 것이 훨씬 더 좋습니다.

좋은 기능 탐지 스크립트는 Modernizr입니다. 이 기능을 사용하여 브라우저에서 수행 할 수있는 작업에 따라 사이트를 사용자 지정할 수 있습니다.

IE 버전 8 및 이전 버전의 경우 Modernizr이 충분하지 않은 경우가 있으며 버그를 해결하기 위해이 브라우저에서 다른 작업을 수행하기 만하면됩니다. 이 경우 IE 코드를 삽입하려면 HTML 코드에 Conditional Comments을 사용하는 것이 좋습니다. 조건부 주석은 IE에서만 지원되는 기능으로 특정 버전을 대상으로 할 수 있으므로 IE 관련 문제를 해결하기위한 해킹에 이상적입니다.

<ui:param name="isIE8" value="#{!header['User-Agent'].matches('.*; MSIE [2-8]\\.0.*')}"/> 

그리고 조건부 몇 가지 코드를 표시합니다

+0

감사를 당신. 문제의 진실은 내가 Openlayers를 사용하고 있으며 IE6-8에서 저에게 효과가 없을 것이고 이유를 찾지 못했습니다. 정말 문제를 피하기 위해 어떤 기능을 특별히 탐지 할 수 있는지 알 수 없습니다. – Ben

0

는이 같은 매개 변수를 저장할 수 있습니다.

JSF 1.2과 바닐라 HTML (NO JSF 구성 요소)와

, 당신은 사용할 수 있습니다

<f:verbatim rendered="#{isIE8}"> 
    Here is the code for old versions IE, without HTML5, for example 
</f:verbatim> 
<f:verbatim rendered="#{!isIE8}"> 
    Here is the code for other browsers 
</f:verbatim> 

을 JSF 2.0, 2.2 또는 JSF 구성 요소 또는 EL 사용 포함 된 코드 :

<ui:fragment rendered="#{isIE8}"> 
    etc. 
관련 문제