브라우저 기능 감지
업데이트: 2007년 11월
브라우저에서 대부분의 JScript 기능을 지원하지만, .NET Framework와 클래스 기반 개체, 데이터 형식, 열거형, 조건부 컴파일 지시문 및 const 문을 대상으로 하는 새로운 기능은 서버측에서만 지원됩니다. 따라서 이러한 기능은 서버측 스크립트에서 단독으로 사용해야 합니다. 자세한 내용은 JScript 버전 정보를 참조하십시오.
JScript 스크립트에서는 스크립트를 해석하거나 컴파일하는 엔진의 기능을 감지할 수 있습니다. 이는 ASP 또는 ASP.NET에서 실행될 서버측 응용 프로그램이나 명령줄 프로그램을 위한 코드를 작성하는 경우에는 지원되는 JScript 버전을 쉽게 알 수 있으므로 필요하지 않습니다. 그러나, 브라우저에서 클라이언트측 스크립트를 실행할 때는 스크립트가 브라우저의 JScript 엔진과 호환될 수 있도록 하기 위해 이를 감지하는 것이 중요합니다.
JScript 호환성은 스크립트 엔진 함수를 사용하거나 조건부 컴파일을 사용하여 확인할 수 있습니다. 이 두 가지 방법은 모두 나름대로의 이점이 있습니다.
스크립트 엔진 함수
ScriptEngine, ScriptEngineBuildVersion, ScriptEngineMajorVersion, ScriptEngineMinorVersion 등의 스크립트 엔진 함수는 스크립트 엔진의 현재 버전에 대한 정보를 반환합니다. 자세한 내용은 함수(JScript)를 참조하십시오.
최상의 호환성을 위해서는 지원되는 JScript 버전을 확인하는 페이지에 JScript 버전 1의 기능만 사용해야 합니다. 엔진에서 JScript 1.0 이상의 버전을 지원하는 경우에는 향상된 기능이 포함된 다른 페이지로 리디렉션할 수 있습니다. 이렇게 하려면 지원하려는 JScript 각 버전에 해당하는 별도의 각 웹 페이지 버전이 있어야 합니다. 대부분의 경우 가장 효율적인 해결 방법은 두 개의 웹 페이지만 사용하는 것입니다. 하나는 특정 JScript 버전을 위해 사용하고 다른 하나는 JScript 없이 사용합니다.
참고: |
---|
향상된 기능을 사용하는 JScript 코드는 호환되지 않는 엔진을 사용하는 브라우저에 의해 실행되지 않는 별개의 페이지에 넣어야 합니다. 이는 브라우저의 스크립트 엔진에서는 페이지에 포함된 모든 JScript 코드를 해석하기 때문에 필요합니다. 이전 엔진의 경우 if…else 문을 사용하여 최신 JScript 버전을 사용하는 코드 블록과 JScript 버전 1 코드 블록을 전환하는 방법은 사용할 수 없습니다. |
다음 예제에서는 스크립트 엔진 함수의 사용 예를 보여 줍니다. 스크립트 엔진 함수는 JScript 버전 2.0부터 도입되었으므로 사용하기 전에 엔진에서 지원하는지 먼저 확인해야 합니다. JScript 버전 1.0만 지원하거나 JScript를 인식하지 않는 엔진인 경우에는, typeof 연산자에서 각 함수 이름에 대해 문자열 "undefined"를 반환합니다.
if("undefined" == typeof ScriptEngine) {
// This code is run if the script engine does not support
// the script engine functions.
var version = 1;
} else {
var version = ScriptEngineMajorVersion();
}
// Display the version of the script engine.
alert("Engine supports JScript version " + version);
// Use the version information to choose a page.
if(version >= 5) {
// Send engines compatible with JScript 5.0 and better to one page.
var newPage = "webpageV5.htm";
} else {
// Send engines that do not interpret JScript 5.0 to another page.
var newPage = "webpagePre5.htm";
}
location.replace(newPage);
조건부 컴파일
조건부 컴파일 변수와 문을 사용하여 조건부 컴파일을 지원하지 않는 엔진으로부터 JScript 코드를 숨길 수 있습니다. 이 방법은 적은 양의 대체 코드를 웹 페이지에 직접 포함시키려고 할 때 유용합니다.
참고: |
---|
여러 줄로 된 주석은 조건부 컴파일을 지원하지 않는 엔진에서 잘못 해석할 수 있으므로 조건부 컴파일 블록 안에 사용하지 마십시오. |
<script>
/*@cc_on
@if(@_jscript_version >= 5 )
// Can use JScript Version 5 features such as the for...in statement.
// Initialize an object with an object literal.
var obj = {"a" : "Athens" , "b" : "Belgrade", "c" : "Cairo"};
var key;
// Iterate the properties.
for (key in obj) {
document.write("The "+key+" property has value "+obj[key]+".<BR>");
}
@else
@*/
alert("Engine cannot interpret JScript Version 5 code.");
//@end
</script>
조건부 @if 블록의 코드 양이 많은 경우에는 앞서 설명한 스크립트 엔진 함수 사용 방법을 사용하는 것이 더 쉬울 것입니다.