2009-11-13 2 views

답변

3

, 즉 ECMA-262의 모질라의 구현, 당신은 버전을 감지 할 type 속성을 사용할 수 있습니다 :

<script type="text/javascript;version=1.5"> v= '1.5'; </script> 
<script type="text/javascript;version=1.6"> v= '1.6'; </script> 
<script type="text/javascript;version=1.7"> v= '1.7'; </script> 
    ... 

이것은 Opera (JavaScript 1.5를 지원한다고 주장하는 최신 버전)에서도 작동합니다. IE와 Webkit은 해당 유형의 버전 매개 변수가있는 스크립트를 실행하지 않습니다.

이 오래된 학교와 유사하다 language 속성 :

<script language="javascript1.5"> v= '1.5'; </script> 
    ... 

이 일반적으로 사용되지 않는 것으로 간주하지만 더 많은 브라우저에서 작업을 수행한다. 최근 웹킷 브라우저는 1.7을 지원한다고 주장하고 모든 IE는 1.3만을 지원한다고 주장합니다. 당신이 찾을 수 없습니다

<script type="text/javascript"> 
    /*@cc_on @if (@_jscript_version>=5.5) 
     v= '5.5'; 
    @end @*/ 
</script> 

다른 브라우저 :

IE는 조건부 주석을 위해 도청 할 수 JScript를위한 its own versioning scheme있다. ECMA-262 버전의 경우 모든 최신 브라우저가 제 3 판의 기준선을 지원합니다 (예, IE에서는 특히 작은 차이점과 철저한 버그가 있지만 그래도 여전히 그렇습니다). 아직 많은 양의 5 판을 지원하는 브라우저는 없지만 앞으로 출시 될 예정입니다. (제 4 판은 없었습니다.)

아무 것도 매우 유용하지 않습니다. 보시다시피 버전 번호는 모두 바보 같으며 브라우저가 대단히 잘 지원하는지 반영하지 않습니다. 일반적으로 능력 스니핑을하는 것이 좋습니다. 예를 들어, ECMA-262-5의 JSON 기능을 원하면 window.JSON이 있는지 확인하십시오. 함수 바인딩을 원하면 함수에 .bind이 있는지 확인하십시오. 이러한 기능과 패치가 부족할 경우 기본 JavaScript 대체 기능을 사용할 수없는 경우이를 찾아 낼 수 있습니다.

그러나 JavaScript의 구문적인 특징은 스 니프 될 수 없습니다.JavaScript 코드 블록에 getter/setter 정의와 같은 것을 포함시키는 것만으로도 IE에서 구문 오류가 발생하기 전에 가용성을 저해 할 수 있습니다. 그러나 실제로는 이러한 새로운 기능을 실제로 사용할 수 없으므로 일반적으로 너무 큰 문제는 아닙니다.

0

당신은 다음과 같은 코드 블록을 평가해야합니다 자바 스크립트의 버전을 지정할 수 있습니다

<script language="javascript1.5"> 
//this code gets run 
</script> 

더 많은 정보 here합니다.

+0

해당 문서는 * 고대 * –

+0

예, 눈치 챘지만 여전히 찾고 있던 것에 대한 답변이 있습니다 :-) –

3

일반적으로 시도할만한 가치가 없습니다.

특정 기능을 사용하려면 해당 기능이 대신 지원되는지 확인하십시오.

그렇다고하더라도 기능이 올바르게 구현되었다고 보장 할 수는 없습니다. ;-)

사례가있는 경우 ... IE는 document.getElementById(id);을 지원하지만 IE8 표준 모드에서 IE8을 사용하지 않는 한 여러 가지 잘못된 결과 중 하나를 반환 할 수 있습니다.

+0

+1 통찰력을 주셔서 감사합니다. –

1

당신이 그것을 할 수있는 또 다른 방법은, 당신이 그것의 구문 중 일부를 차단하려고 시도 할 수 있습니다. 예 :

try{ 
    "use strict"; 
    let x=1;//if it's works, then you have some supprot 
    console.info("Good news, ecma6 works "); 
}catch(e){ 
    console.warn("Sorry, but ecma6 still doesn't supported"); 
} 
관련 문제