Windows Forms의 WebBrowser 컨트롤은 데스크톱 애플리케이션 안에서 웹 페이지를 표시할 수 있게 해주는 강력한 도구입니다. 경우에 따라 표시된 웹 페이지에 사용자 지정 JavaScript 코드를 삽입해야 할 필요가 있는데, 이 글에서는 그 과정을 단계별로 자세히 살펴보겠습니다.
1. 사전 준비 단계
JavaScript를 삽입하기 전에 먼저 다음과 같이 환경을 준비합니다.
- Visual Studio에서 Windows Forms 애플리케이션 프로젝트를 새로 생성합니다.
- 도구 상자(Toolbox)에서 WebBrowser 컨트롤을 폼 위로 끌어다 놓습니다.
- 컨트롤의
Url속성을 표시하려는 웹 페이지 주소로 설정합니다. - 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭한 뒤 참조 추가(Add Reference) → COM → 형식 라이브러리(Type Libraries)를 차례로 선택합니다.
- 목록에서 "Microsoft HTML Object Library"를 찾아 선택하고 확인 버튼을 누릅니다.
2. JavaScript 삽입 코드 작성하기
준비가 끝났다면, 웹 문서의 로드가 완료되었을 때 호출되는 이벤트 핸들러에 아래 코드를 작성하여 JavaScript를 삽입할 수 있습니다.
private void myWebBrowser(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// head 요소 가져오기
HtmlElement hElement = webBrowser.Document.GetElementsByTagName("head")[0];
// script 요소 생성
HtmlElement sElement = webBrowser.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)sElement.DomElement;
// 스크립트 내용 정의
element.text = "function sayHello() {
alert('Welcome');
}";
// head 요소에 script 추가
hElement.AppendChild(sElement);
// 삽입된 스크립트 함수 호출
webBrowser.Document.InvokeScript("sayHello");
}
3. 코드 동작 방식 설명
위 코드의 핵심 흐름은 다음과 같습니다.
- head 요소 접근:
GetElementsByTagName("head")메서드를 통해 현재 문서의 head 영역을 가져옵니다. 스크립트는 일반적으로 head에 추가하는 것이 표준적인 방식입니다. - script 요소 생성:
CreateElement("script")로 새 스크립트 노드를 만든 후, DOM 요소를IHTMLScriptElement인터페이스로 캐스팅합니다. 이 인터페이스 덕분에text속성을 통해 직접 JavaScript 코드를 지정할 수 있습니다. - 스크립트 등록 및 실행: 완성된 script 요소를 head에 추가(
AppendChild)하면 해당 함수가 페이지에서 사용 가능해지고,InvokeScript메서드를 호출하여 즉시 실행할 수 있습니다.
마무리
이처럼 Microsoft HTML Object Library의 IHTMLScriptElement 인터페이스를 활용하면 WebBrowser 컨트롤로 표시한 웹 페이지에 원하는 JavaScript를 손쉽게 주입할 수 있습니다. 이 기법은 페이지 동작 제어, 알림 표시, DOM 조작 등 다양한 시나리오에서 유용하게 활용될 수 있습니다.