브라우저가 Internet Explorer 인 경우 렌더링해서는 안되는 특정 구성 요소가있는 웹 응용 프로그램이 있습니다.브라우저 유형에 따라 구성 요소를 렌더링하는 방법은 무엇입니까?
기술적으로 jquery를 사용할 수 있지만 클라이언트 측 코드이고 렌더링 된 속성이 서버에서 계산되기 때문에 아무 문제가 없다고 가정합니다.
어떻게하면됩니까?
브라우저가 Internet Explorer 인 경우 렌더링해서는 안되는 특정 구성 요소가있는 웹 응용 프로그램이 있습니다.브라우저 유형에 따라 구성 요소를 렌더링하는 방법은 무엇입니까?
기술적으로 jquery를 사용할 수 있지만 클라이언트 측 코드이고 렌더링 된 속성이 서버에서 계산되기 때문에 아무 문제가 없다고 가정합니다.
어떻게하면됩니까?
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가 실제로는
브라우저 만 해석하므로 훨씬 신뢰할 수 있습니다.
당신이 그것을 피할 수 있다면, 나는 특정 브라우저를 위해 특정 물건을하려고하지 않는 것이 좋습니다. 특히 서버 측에서 브라우저를 확인하는 유일한 방법은 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.*')}"/>
그리고 조건부 몇 가지 코드를 표시합니다
는이 같은 매개 변수를 저장할 수 있습니다.
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.
감사를 당신. 문제의 진실은 내가 Openlayers를 사용하고 있으며 IE6-8에서 저에게 효과가 없을 것이고 이유를 찾지 못했습니다. 정말 문제를 피하기 위해 어떤 기능을 특별히 탐지 할 수 있는지 알 수 없습니다. – Ben