본문 바로가기

아티클/팁/.NET / Windows

20060305_ActObject 프로토타입 완성.

MS의 IE 관련 ActiveX 변경사항에 대응하기 위한 서버 컴퍼넌트 ActObject의 프로토타입이 막 완성되었습니다-




- ActiveX 변경사항이 뭐냐?

아직 MS의 인터넷 익스플로러 관련 변경사항에 대해서 모르는 분은 다음 링크를 :

http://www.microsoft.com/korea/windows/ie/activex/default.mspx

위 사항이 어떤 사태를 가져오는지 간단히 말하자면, 웹 문서에 플래시같은 UI를 가진 컨트롤이 있을 경우 이 컨트롤을 한 번 클릭해줘야 정상적으로 사용할 수 있는 문제가 생기게 된다. 보면, 다음처럼 활성화가 되지 않았다고 나오면서 클릭해달라는 툴팁이 뜬다.


- 클릭하지 않으면?

위의 미디어 플레이어를 예로 들자면, 플레이, 정지 버튼 같은 UI 요소를 사용할 수 없게 된다.

- 그러면 어떻게 해야하는가?

그냥 팔자려니... 하고 사는 방법도 있지만 그건 좀 그렇고.. 현재로서는 스크립트를 수정, 해당 컨트롤의 태그를 외부에서 삽입하도록 하면 된다. 외부에서 삽입, 이라고 말하면 감이 잘 안 오는게 당연하다. 다음 태그를 보자 :

<embed src="http://www.xbox.com/NR/rdonlyres/4F5B8111-F4FF-4EFE-9F8A-8B303FE47748/0/vidkameoe3003Hi.asx" autostart="0" />

우리가 일반적으로 사용하는 태그가 위와 같은 것이라면, 이를 외부에서 삽입하도록 코드를 바꾸면 된다. 몇 가지 방법이 있지만, 우선 스크립트 파일(.js)을 이용하는 방법은 다음과 같다.

<script src="embed.js"></script>

// embed.js

<script><!--

document.write('<embed src="http://www.xbox.com/NR/rdonlyres/4F5B8111-F4FF-4EFE-9F8A-8B303FE47748/0/vidkameoe3003Hi.asx" autostart="0" />');

// --></script>

결론적으로는 위와 같다. jscript를 이용해서 태그를 쓰는 코드를 넣어주면 되는 것이다.

또는 다음과 같이 임의로 정의한 함수를 통해 해결할 수도 있다 :

<script src="embed.js"></script>

<script><!--

docwrite('<embed src="http://www.xbox.com/NR/rdonlyres/4F5B8111-F4FF-4EFE-9F8A-8B303FE47748/0/vidkameoe3003Hi.asx" autostart="0" />');

// --></script>

// embed.js

<script><!--

function docwrite(tag)

{

   document.write(tag);

}

// --></script>

모든 태그에 이런 작업을 해주면, 일반 사용자에게는 예전처럼 정상적인 페이지(컨트롤 주위에 테두리가 생기거나 '클릭하세요'같은 툴팁이 뜨지 않는)가 보여진다.

하지만, 수작업으로 문제를 해결하기에는 몇 가지 문제가 있다 :

- 수정하는데 드는 비용(시간적, 금전적)

- 서버측 스크립트에서 동적으로 컨트롤 관련 태그를 생성하고 있거나, 페이지 구성의 복잡도가 높을 경우 수정 자체가 용이하지 않다.

- 사용자가 태그를 입력하는 경우(ex:태그입력 가능 게시판) 적용하기 어렵다.

... 뭐 그래서, ActObject는 결국 '아예 웹 서버에서 나가는 모든 응답을 검사해서 태그를 생성하자'라는 아이디어로 출발해 만들어진 컴포넌트라는 이야기. 자동으로 태그를 분석해서 위와 같은 작업을 자동화하고, 필요한 .js 파일을 생성하는 기능이 있다.

아직 유니코드처리 코드도 못 넣었고(euc-kr, UTF8 인코딩에서는 문제가 없지만), 아직 못 찾아낸 버그도 잔뜩 있지만... 여튼 잘 돌아간다. 아우 이제 인스톨러 만들어야 하나...