System.Windows.Forms.WebBrowser 컨트롤 알차게 쓰기 #1 – 상호 운용

.NET Framework 2.0에서 구현이 잘 된 컴포넌트로 손에 꼽을 수 있는 것이 바로 WebBrowser 컨트롤이다. 이 컨트롤은 단순히 Internet Explorer를 가져온 것이 아니다. 대표적인 예로 특별한 노력을 기울이지 않아도 상호 운용이 가능하다는 점이다.

1. JScript에서 Host 프로그램에 액세스하기

JScript에서 Host 프로그램을 접근하고 사용하는 방법은 간단하다. 문서를 로드하기 전에 WebBrowser 컨트롤 객체의 속성 중 하나인 ObjectForScripting에 원하는 객체를 지정해 주면 된다. 단, 여기에 지정할 수 있는 객체는 반드시 System.Runtime.InteropServices.ComVisibleAttribute가 지정되어있어야 하고 물론 값을 True로 설정해 놓은 상태여야 한다.

로드할 문서 안의 자바스크립트에서는 window.external 객체를 통하여 Host 프로그램이 노출한 객체를 사용할 수 있다. 만약 HelloWorld라는 클래스를 노출하였고 이 클래스의 멤버 함수 ShowMessage 함수를 실행하려 한다면 window.external.ShowMessage() 와 같이 기술하면 되겠다.

2. Host 프로그램에서 JScript에 액세스하기

문서가 완전히 로드가 되었을 때를 전제로 한다. 문서가 완전히 로드된 상태에서 JScript 함수를 단독으로 실행하고 그 결과값을 되돌려 받는 방법은 간단하다. WebBrowser.Document.InvokeScript 함수를 이용하는 방법이다. InvokeScript 함수는 두 가지 버전이 있는데, 매개 변수를 받는 버전과 받지 않는 버전이다. 매개 변수는 System.Object의 배열 형태로 전달되고 결과값은 System.Object 형태로 반환된다. 반환 값이 없는 함수의 경우 null 참조 (Visual Basic의 Nothing)를 반환할 것이다.

3. 신경써야 할 것들

COM과 닷넷 사이가 완전히 자유로운 것은 아니다. 그러므로 몇 가지 챙겨야 할 것이 있다. 되도록 함수와 프로퍼티 수준에서 연동을 마무리하는 것이 좋으며 콜백 등을 구현하고자 한다면 테스트해야 할 것이 많을 것으로 생각된다. 또한 닷넷 2.0의 제네릭은 COM으로 전달이 불가능하다.

댓글 남기기