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

번호 제목 글쓴이 날짜 조회 수
246 정규식을 이용한 이메일 검증 스크립트 file 황제낙엽 2023.06.25 216
245 [Gemini] ajax 와 fetch 의 차이 황제낙엽 2025.01.04 227
244 JSON 클래스가 지원하는 function 황제낙엽 2023.03.31 237
243 [Copilot] JSON 객체 내부 데이터를 순회하면서 조회하는 코드 황제낙엽 2024.06.02 237
242 [Copilot] ES6 모듈(module) 문법 황제낙엽 2024.06.21 237
241 Function declaration 과 Function expression 의 차이 황제낙엽 2021.03.07 243
240 카페의 회람 . 막기 소스 황제낙엽 2005.10.21 244
239 json 데이터 내의 변수명에 prefix 로 type 표현하기 황제낙엽 2024.04.15 246
238 [ChatGPT] json data 의 정렬 [1] 황제낙엽 2024.07.23 250
237 (Bard) JavaScript로 JSON 배열을 작성하는 방법 황제낙엽 2023.08.21 260
236 DOMContentLoaded 이벤트와 window.onload 이벤트 황제낙엽 2024.07.15 265
235 [펌]사용자 정의 클래스 생성 및 common library 의 개념. 황제낙엽 2008.08.06 269
234 함수 Call Stack 디버깅을 위한 함수 선언 팁 황제낙엽 2021.03.07 279
233 Arrow function 황제낙엽 2021.03.07 279
232 fetch() 사용 예제들 황제낙엽 2024.07.09 281
231 IIFE (Immediately Invoked Function Expression) 황제낙엽 2021.03.07 282
230 (Copilot) JSON 객체의 내부 데이터 리스트 길이를 구하는 방법 황제낙엽 2023.03.30 283
229 client 통신 기술 jquery ajax, fetch, axios 황제낙엽 2021.12.05 291
228 Json 특징 및 문법 황제낙엽 2021.01.26 292
227 SpiderMonkey 를 이용한 개발 일기 file 황제낙엽 2008.07.14 293