IE ActiveX 패치 관련 수정시 참고 사항... Computer Code

관련 작업하시는 분들의 삽질을 조금이나마 막아보고자 공유합니다.. ^^

1. 사용자의 키보드, 마우스 등의 입력을 직접 받아서 처리하지 않는 ActiveX의 경우는 대부분 별도의 수정없이 잘 작동합니다. 다만 ActiveX가 윈도 메시지를 통해 사용자의 입력을 처리하는 경우는 UI가 있든 없든 UI Activation 과정을 거쳐야 합니다. 아마 UI가 없는 ActiveX가 사용자의 입력을 직접 받아서 처리하는 경우는 없을 거라고 생각합니다.

- "UI가 없는 ActiveX 컨트롤들은 대부분 별도의 수정없이 잘 작동합니다."라는 말에서 오해가 있었습니다.^^;
- 일반적인 키보드 보안 제품 같이 후킹을 통해 사용자 입력을 처리하는 ActiveX의 경우는 대부분 잘 작동할 겁니다.


2. 알려진 대로 플래시를 비롯한 UI가 있는 ActiveX 컨트롤들은 별도의 js 파일에서 document.write( '<object ...' );와 같은 식으로 출력해주시면 IE의 UI 활성화 정책과 상관없이 사용가능합니다. 단, 반드시 별도의 js 파일에서 해주어야 합니다.
document.write로 OBJECT 태그를 작성하더라도 같은 HTML에 있으면 UI Activation을 하라고 나오게 됩니다.  document.write를 함수로 작성하든 직접 HTML 사이에 끼워넣든 같은 HTML에 있으면 UI Activation의 대상이 되니 참고하세요.
일단 지금은 이런식으로 변경 작업을 하고 있습니다.

// ActiveXObjects.js

function setLoginControl() {
   var _obj_ = "";
   _obj_ = '<object classid=''....>'
   _obj_ = ....
   _obj_ = '</object>';
  
   document.writeln( _obj_ );
}

function setFlashCommon( id, flashUri, vWidth, vHeight ) {
   var _obj_ = "";

   _obj_ = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="' + vWidth + '" height="' + vHeight + '" id="' + id + '" align="middle">';
   _obj_ += '<param name="movie" value="' + flashUri + '" />';
   _obj_ += '<param name="quality" value="high" /><param name="wmode" value="transparent" />    ';
   _obj_ += '<param name="bgcolor" value="#ffffff" />        ';
   _obj_ += '<embed src="' + flashUri + '" quality="high" wmode="transparent" bgcolor="#ffffff" width="' + vWidth +'" height="' + vHeight + '" id="' + id + '" align="middle" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></embed>    ';
   _obj_ += '</object>';

   document.writeln( _obj_ );
}

덧글

  • channy 2006/01/26 13:39 # 삭제 답글

    UI가 없는이라는 건 width=0 height=0으로 자동 컨트롤을 띄우는 인터넷 뱅킹 플러그인 같은 경우도 해당 되나요?
  • 플루 2006/01/26 15:53 # 답글

    UI의 유/무보다는 사용자와의 상호작용이 있느냐 없느냐로 얘기를 하는게 맞습니다. ^^; 내용 수정해두었으니 참고하시구요..
    아마 그런 류의 인터넷 뱅킹 플러그인은 특별히 수정하지 않아도 작동할 듯 합니다. ^^
  • channy 2006/01/26 16:52 # 삭제 답글

    근데 activation이 안됐는데 후킹이 될까요?
  • 거친마루 2006/01/26 17:41 # 삭제 답글

    저도 나름대로 삽질을 줄이는 방법을 고안중입니다.
    페이지에 직접 object 태그를 썼다고 가정했을때 별도의 js 파일에서 html 페이지내의 object 태그를 찾아낸다음 그 자리에 스크립트로 생성한 새 태그를을 재차 삽입해주면 문제가 없는것 아닌가 하는 가정하에 완전 자동화 스크립트를 만들어보는중입니다만 여러가지 경우를 처리하기가 꽤 힘드네요^^
  • 플루 2006/01/26 17:45 # 답글

    상호작용이 안된다고 하는 것은 WM_LBUTTONDOWN 같은 메시지가 ActiveX에 전달이 안된다는 것입니다. 즉 IE 차원에서 먼저 메시지를 캡처해서 그걸 하위 윈도우에 전달하지 않는다는 차원이구요...

    그런 일반 윈도 메시지 처리와는 달리 후킹은 애플리케이션이 OS hook chain에 직접 등록한 hook 프로시저를 통해서 처리를 하게 되므로 조금 다른 얘기인 것 같습니다. 뭐, IE 패치를 하면서 hook chain도 건드릴려면 건드릴 수야 있지만 그건 MS 입장에서도 좀 오버라고 생각한 듯 싶습니다.. ^^
  • 플루 2006/01/26 18:03 # 답글

    거친마루 // 제가 다니는 회사에서도 몇 가지 논의가 있었습니다. 한 방에 모든 ActiveX를 활성화시켜주는 ActiveX를 만들어 적용하자라는 방법이 제시됐었죠.. 하지만 앞으로 웹이 나아가야할 길에 반한다는 이유로 몇 초만에 없었던 얘기가 됐구요.. -_-;
    거친마루님께서 말씀하신 방법도 시도를 했었으나 역시 여러가지 경우가 걸림돌이 되었습니다. 특히 어느 시점(페이지 파싱 or onload 등)에서 ActiveX OBJECT 태그를 브라우저로 하여금 인식시키게 할 것이냐에 대한 문제가 제일 컸죠.

    그나마 다행스러운 점은 ActiveX를 JSF, 자바 커스텀태그 등으로 사용해왔기에 웹컨트롤 코드만 수정하면 되는 정도로 끝나더라구요. 그렇지 않은 부분은 Copy & Paste 신공을 펼치는 중입니다. 혹자는 'Move' Refactoring을 적용하고 있다고 주장합니다. 뭐 맞는 말이겠죠.. :-)

    여튼 어쨌거나 평소에 잘 해놓는게 최선인 듯 합니다. ^^;
  • 거친마루 2006/01/26 18:13 # 삭제 답글

    액티브엑스가 아닙니다 흐흐 요번 문제의 유일한 쥐구멍인 외부 js 파일이고요
    activation 시켜주는것까지는 아직이고, 문서에 직접 object 쓴것들을 외부 js로 쓴것으로 만들어주는 꼼수 스크립트입니다.

    그나저나 플래시로 만든 메뉴들은 플래시 빈곳을 클릭하여 활성화시켜줄때까지 롤오버에 서브메뉴 돌출이나.. 클릭시 메뉴이동이 안되어버리면 그거 참 큰일이라고 생각하고있습니다.
  • 플루 2006/01/26 18:31 # 답글

    거친마루 // 아... 제가 글을 잘못 읽었군요. ^^; 지금 작성하고 계신 언어에서 쓸 수 있는 HTML Parser 라이브러리 등이 도움이 되지 않을까 조심스레 권장해봅니다... ^^
  • 일이 2006/01/31 10:17 # 삭제 답글

    오. 좋은 정보!
댓글 입력 영역