ActiveX
[공지사항] 이 페이지는 더이상 업데이트되지 않으며, 최신 버전은 http://reiot.springnote.com/pages/87215 에서 읽으실 수 있습니다.
어쩌다보니 ActiveX를 이용해서 브라우저에서 클라이언트를 실행하는 작업을 도와주게 되었다. 담당자나 나나 이 쪽으로는 거의 지식이 전무한 상태였는데, 삽질을 반복하면서 여러 가지 유용한 정보들을 알아내었다. 이미 귀국 날짜가 연기된 마당이므로 시간도 널널하고 해서 알아낸 점들을 정리해본다.
혹시라도 이 분야에 처음 발을 들였다면 A Complete ActiveX Web Control Tutorial를 꼭 읽어보기 바란다. 물론 위키피디아의 설명도 괜찮다.
설치 여부 알아내기
파란닷컴처럼 active-x 컨트롤이 설치되지 않은 컴퓨터에 대해서 설치 안내 페이지로 redirect 시키려면, onerror 이벤트를 이용하면 된다.
<script language="javascript" for="mycontrol" event="onerror">
location.href = '/redirect/to/how-to-install.html';
<OBJECT ID='mycontrol' CLASSID='....' codebase=....>
Active-X control not installed. go to <a href="/redirect/to/how-to-install.html">HOW TO INSTALL Active-X page
이때 OBJECT 태그 사이의 코드들은 해당 객체가 로드되지 않을 경우 렌더링된다는 점을 잘 활용하면 좋을 것이다.
삭제하기
XP 의 경우 $WINDOWS/Downloaded Program Files/ 아래에서 삭제하면 된다. Windows 2003 의 경우는 어디인지 확인할 수 없었다.
컨트롤 활성화
올해부터 IE에서는 컨트롤이나 애플릿들이 기본적으로 비활성화 상태로 변경되었다. 이를 수정하는 방법은 자바스크립트 코드를 이용해서 OBJECT 태그를 쓰면 된다. 보다 자세한 사항은 HOWTO 문서를 참고할 것.
document.write('<object classid="CLSID:..." type="application/x-oleobject" codebase="..." width="320" height="240"> ');
ActiveX Control Pad
마이크로소프트에서 제공하는 유틸리티인데 실제로 마소에서는 받아지질 않는다. 따라서 여기서 받을 것.
브라우저로 이벤트 전달하기
만약 ActiveX 컨트롤에서 click 등의 마우스 이벤트 핸들러를 정의했다면 javascript 레벨에서 동일한 이벤트 핸들러를 정의할 수 없다. 이는 컨트롤이 이벤트를 먹어버리기 때문으로 보이는데, 이를 해결하려면 컨트롤에서 이벤트를 정의하고 브라우저로 보내준 다음 브라우저에서 핸들링을 하면 된다.
Public Event CloseBrowser()
Public Sub OnClick()
' handle click event
RaiseEvent CloseBrowser() ' fire event
End
<script language="javascript" for="mycontrol" event="closebrowser">
self.close();