실행될 코드는 < script Language="JavaScript1.2" >처럼 중첩되어야 한다고 하더군요. 그런데 자바스크립트 버전을 검색하라는 요청을 받았을 때 다음 코드를 받았습니다.
var JS_ver = [];
(Number.prototype.toFixed)?JS_ver.push("1.5"):false
([].indexOf && [].forEach)? JS_ver.push("1.6 "):false;
((function(){try {[a,b] = [0,1];return true;}catch(ex) {return false;}})( ))?JS_ver.push ("1.7"):false;
([].reduce && [].reduceRight && JSON)?JS_ver.push("1.8"):false
("".trimLeft )?JS_ver.push( "1.8.1"):false;
JS_ver.supports = function()
{
if (arguments[0])
return (!!~this.join ().indexOf(arguments [0] ",") ",");
else
return (this[this.length-1])
}
alert("최신 Javascript 버전 지원됨: " JS_ver.supports ());
alert("버전 1.7 지원: " JS_ver.supports("1.7"));
이 스크립트는 JavaScript 버전을 감지할 수 있을 뿐만 아니라 기능을 감지하여 특정 Javascript 버전에서 지원하는 기능을 확인합니다.
결과를 얻었으니 이 시스템이 어떻게 자바스크립트 버전을 감지하는지 살펴보겠습니다. 그래서 코드를 추출했고(추출 과정이 상당히 복잡했습니다) 다음 코드를 얻었습니다:
코드 구현 원칙: 버전에 따라 JavaScript는 버전을 결정하는 일부 특정 기능을 다르게 지원합니다. 버전 1.4에는 단 하나의 특별 처리가 있습니다.