일반적으로 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 [Gemini] ajax 와 fetch 의 차이 황제낙엽 2025.01.04 3419
245 [검토 완료] 디바이스 카메라로 촬영한 사진을 서버에 업로드하기 샘플 황제낙엽 2024.11.21 3987
244 브라우저에서 이미지를 편집(crop 등) 할 수 있는 오픈소스 Cropper.js 황제낙엽 2024.11.16 3842
243 [ChatGPT] json data 의 정렬 [1] 황제낙엽 2024.07.23 3352
242 DOMContentLoaded 이벤트와 window.onload 이벤트 황제낙엽 2024.07.15 3669
241 fetch() 사용 예제들 황제낙엽 2024.07.09 3380
240 [Copilot] Vanilla JavaScript에서 외부 스크립트 파일에 정의된 함수들을 로드 황제낙엽 2024.06.21 3758
239 [Copilot] ES6 모듈(module) 문법 황제낙엽 2024.06.21 3805
238 [Copilot] JSON 객체 내부 데이터를 순회하면서 조회하는 코드 황제낙엽 2024.06.02 3270
237 [Copilot] JavaScript로 서버에 특정 값을 POST 방식으로 전달하고 응답을 기다리지 않고 바로 종료 황제낙엽 2024.05.31 3615
236 json 데이터 내의 변수명에 prefix 로 type 표현하기 황제낙엽 2024.04.15 3361
235 fetch() 함수 사용 예제 file 황제낙엽 2023.11.23 3605
234 현재 document 의 host 와 port 를 얻는 방법 황제낙엽 2023.10.03 4209
233 (Bard) FileReader 로 여러개의 파일을 read 하는 법 file 황제낙엽 2023.08.23 3660
232 How to build a file upload service with vanilla JavaScript file 황제낙엽 2023.08.22 3715
231 (Bard) JavaScript로 JSON 배열을 작성하는 방법 황제낙엽 2023.08.21 3672
230 모바일 브라우저에서 file input element 를 이용하여 여러장의 이미지를 서버에 전송하려 할때 [1] 황제낙엽 2023.08.21 3703
229 navigator.mediaDevices 황제낙엽 2023.08.21 3798
228 Barcode Detection API 황제낙엽 2023.08.06 3854
227 정규식을 이용한 이메일 검증 스크립트 file 황제낙엽 2023.06.25 2894