sitelink1 http://blog.naver.com/bloodguy80?Redirec...0045183527 
sitelink2 http://blog.mrlatte.net/2009/09/activex.html 
sitelink3  
sitelink4  
extra_vars4  
extra_vars5  
extra_vars6  

일반적으로 ActiveX 설치확인시 사용하는 방법은 아래와 같다.

레지스트리에 등록되는 ProgId 값으로 검사하는 방법이다.

 

function ActiveX설치확인(ProgId)

{

  var isInstall = false;

  try {

    var obj = new ActiveXObject(ProgId);

    if (obj) return true;

  } catch (e) {

    return false;

  }

 

  return false;

}

 

 

다 잘되는데 문제가 하나 있는데,

같은 종류지만 버전이 낮은 ActiveX가 설치되어 있을 경우이다.

이럴 경우 자동으로 업데이트를 시도하게 되는데 위의 저 'ActiveX설치확인()' 함수를 호출할 때 ActiveXObject 를 하나 만들어 버려서,

업데이트를 할 수 없게되고 재부팅을 하라고 한다.

그러므로 원활한 버전 업데이트까지 염두에 둔다면 ActiveXObject를 생성해서 검사하면 안되고,

Object의 특정 property를 통해 검사하는 게 필요할 듯 하다.

method는 안된다. 만약 ActiveX가 설치되지 않은 상태에서 method의 이름으로 검사하면 자바스크립트 에러가 난다.

 

예를 들어, 어떤 ActiveX 오브젝트의 property 중 이름을 나타내는 name 이란게 있다고 치고 문자열이라고 칠 때,

아래와 같이 검사하면 되겠다.

 

function ActiveX설치확인(objName)

{

  var obj = document.getElementById(objName);

  if (obj) {

    if (obj.name!='[undefined]') return true;

  }

  return false;

}


특히 우리나라 웹사이트를 들어다 보면 ActiveX설치를 요구하는 웹 페이지를 많이 볼 수 있다. 금융권 사이트에 들어갈 때면 ActiveX설치 요구가 무척이나 많다. 너무 많은 ActiveX요구가 있을 땐 잘못하면 사용자들의 기분을 상하게 할 수도 있고 매번 페이지를 열 때마다 AcitveX설치를 확인하는 작업과 설치가 되어있지 않았을 때 cab파일을 다운로드 받아야 하는 시간 때문에 페이지 다운로드 시간이 오래 걸릴 수도 있다. 이런 부분을 해결하고자 ActiveX설치 여부를 확인할 수 있는 javascript를 찾아봤다. 이걸 이용해 페이지 사용자들의 ActiveX기능 요구 시 설치 여부를 확인하고 설치할 수 있도록 해줄 수가 있다.

ActiveX 설치확인 Javascript

var ActiveXDetector = {
    ACTIVEX_OBJECT_NAME: "YOUR ACTIVEX OBJECT NAME",
    getActiveX: function() {
        try{
            var obj = new ActiveXObject(this.ACTIVEX_OBJECT_NAME);
            if(obj) return obj;
            else ret = null;
        }catch(e){
            ret = null;
        }
        return ret;
    }
}

if(ActiveXDetector.getActiveX()) {
    alert("ActiveX 설치");
}else {
    alert("ActiveX 설치 안됨");
}

ActiveXObject

ActiveXObject의 함수 원형은 아래와 같고 2가지 인수를 제공한다.
http://msdn2.microsoft.com/ko-kr/library/6958xykx(VS.80).aspx

function ActiveXObject(ProgID : String [, location : String])

ProgID

필수적 요소. "serverName.typeName" 형식의 문자열입니다. 여기서 serverName은 개체를 제공하는 응용 프로그램 이름이고 typeName은 만들 개체의 형식 또는 클래스 이름입니다.

location

선택적 요소. 개체가 만들어질 네트워크 서버의 이름입니다.

이를 활용하면 Excel 의 설치여부나 FlashPlayer의 설치여부도 확인할 수 있다.

Excel = new ActiveXObject("Excel.Application");
FlashPlayer = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.9");

참고로 FlashPlayer는 버전마다 개체 이름이 변경된다.

ShockwaveFlash.ShockwaveFlash.9
ShockwaveFlash.ShockwaveFlash.8
ShockwaveFlash.ShockwaveFlash.7
ShockwaveFlash.ShockwaveFlash.6
...
이런 식으로 가능하다.

결론
위와 같은 javascript는 개체이름이 변경되지 않았다면 새로운 버전의 ActiveX를 설치를 강제해야 하는 상황이라면 확실한 버전확인은 힘들 것이다. 때문에 ActiveX의 설치여부와 버전을 좀 더 확실히 하기 위해서 개체 이름을 버전마다 바꾸는 것도 방법이겠지만 그것보다는 ActiveX의 버전정보를 반환하는 Method를 추가해 배포하는 것이 좋을 것이다.



소스 내용으로 미루어보아 ActiveX DOM Element 를 직접 접근하여 ActiveX 프로그램이 제공하는 속성을 검사했을때 undefined 인지 아닌지로 설치 여부를 판단한다는 것 같다.
두번째 방법은 해당 ActiveX 프로그램에 대해 알고 있어야만 사용할 수 있다.

그래서 다음의 방법을 찾아냈다.
프로그램 개발시 적용 가능한 방법대로 한번씩 적용해보는게 낫겠다.

<OBJECT TYPE="application/x-oleobject" CODEBASE="test.cab#version=1,0,0,0" ID="testCtrl" CLASSID="CLSID:923E232E-68F3-4B89-8B56-4FE522E7F959" WIDTH=100 HEIGHT=20>

위와 같을 경우

object 설정내에 onError="activex_error()" 를 추가 함으로써

설치가 되지 않았을 경우에 자바스크립트로 설치여부 확인이 가능합니다.

아래와 같이 사용하시면 됩니다.

<script>
function activex_error(){ 
alert("설치가 되지 않았습니다");
</script>
<OBJECT TYPE="application/x-oleobject" CODEBASE="test.cab#version=1,0,0,0" ID="testCtrl" onError="activex_error()" CLASSID="CLSID:923E232E-68F3-4B89-8B56-4FE522E7F959" WIDTH=100 HEIGHT=20>


출처 : PHPSCHOOL

번호 제목 글쓴이 날짜 조회 수
117 Defining classes and inheritance (클래스 정의와 상속) 황제낙엽 2011.03.24 392
116 User Agent 관련 Reference URL 황제낙엽 2011.02.22 41
115 각 브라우저 별 User Agent 정보 황제낙엽 2011.02.22 823
114 History of User Agent 황제낙엽 2011.02.22 38
113 Navigator 객체란? 황제낙엽 2011.02.22 53
112 Understanding User-Agent Strings 황제낙엽 2011.02.22 76
111 User Agent 정보 모음 file 황제낙엽 2011.02.22 7767
» ActiveX 설치 여부를 검사하는 스크립트 황제낙엽 2011.02.13 4053
109 [JavaScript Tutorials] Error handling in JavaScript using try/catch/finally - The Error object and throwing your own errors (해석중) 황제낙엽 2009.04.10 82
108 [JavaScript Tutorials] More leakage patterns (해석중) 황제낙엽 2009.04.10 142
107 [JavaScript Tutorials] Introducing the closure (해석중) 황제낙엽 2009.04.10 555
106 [JavaScript Tutorials] JavaScript and memory leaks (해석중) 황제낙엽 2009.04.08 102
105 [JavaScript Tutorials] Handling runtime errors in JavaScript using try/catch/finally (해석중) 황제낙엽 2009.04.08 2784
104 JavaScript Closures for Dummies 황제낙엽 2009.04.08 227
103 자바스크립트 예약어 황제낙엽 2010.11.03 35
102 YUI Logger(Yahoo) 를 동적으로 로드하는 북마크릿 황제낙엽 2010.10.03 25
101 Javascript 를 사용하여 Binary File 읽기 황제낙엽 2010.09.29 499
100 크로스 브라우저를 위한 브라우저 검사 코드 file 황제낙엽 2010.08.27 86
99 Dynatrace For Ajax Performance 황제낙엽 2010.08.18 45
98 javascirpt IME-Mode 설정하기 황제낙엽 2010.08.17 1112