프로그래밍/.NET2013.02.04 18:32

WebBrowser 컨트롤은 윈도우폼 애플리케이션에 사용됩니다. WebBrowser컨트롤은 HTML 요소를 이용하여 내용을 액세스하고, 데이터 프로세스, 많은 프로퍼티와 메소드를 추적할 수 있는 많은 이벤트들을 제공합니다.

예를 들어, 구글 로그인 버튼에 클릭 이벤트를 강제로 발생시킬수도 있고, 구글계정을 입력하지 않고, 자동로그인을 할 수도 있습니다.


WebBrowser 컨트롤은 System.Windows.Forms에 상속되어있습니다.

그냥 ASP.NET에서 System.Windows.Forms 참조를 추가하고 WebBrowser 객체를 쓰려고 하면 에러가 발생합니다.


이제 이 에러를 해결해봅시다.

우선. [ASP.NET 웹 응용 프로그램] 프로젝트를 하나 생성합니다.

그리고, [클래스]를 추가합니다.


참조에 [System.Windows.Forms]도 추가해줍니다.


IEBrowser.cs

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

using System.Threading;
using System.Windows.Forms;

namespace ASP.NET_WebBrowser
{
    public class IEBrowser: System.Windows.Forms.ApplicationContext
    {
        WebBrowser ieBrowser;
        Form form;
        Thread thrd;

        public IEBrowser()
        {
            thrd = new Thread(new ThreadStart(
                delegate
                {
                    Init();
                    System.Windows.Forms.Application.Run(this);
                }));
            // set thread to STA state before starting
            thrd.SetApartmentState(ApartmentState.STA);
            thrd.Start();
        }

        private void Init()
        {
            // create a WebBrowser control
            ieBrowser = new WebBrowser();

            // WebBrowser EnventHandler
            //ieBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(IEBrowser_DocumentCompleted);
            //ieBrowser.Navigating += new WebBrowserNavigatingEventHandler(IEBrowser_Navigating);

            form = new System.Windows.Forms.Form();
            ieBrowser.Dock = System.Windows.Forms.DockStyle.Fill;
            form.Controls.Add(ieBrowser);
            form.Visible = true;

            ieBrowser.Navigate("http://naver.com");
        }

        protected override void Dispose(bool disposing)
        {
            if (thrd != null)
            {
                thrd.Abort();
                thrd = null;
                return;
            }

            System.Runtime.InteropServices.Marshal.Release(ieBrowser.Handle);
            ieBrowser.Dispose();
            if (form != null) form.Dispose();
            base.Dispose(disposing);
        }

        // 인터넷의 로딩이 완료되면 창이 닫힘.
        void IEBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            this.Dispose(true);
        }
    }    
}

클래스를 생성자에서 쓰레드를 설정한 후 윈폼에서 WebBrowser 컨트롤을 사용하시듯 사용하시면 됩니다.


예제 소스 다운받아서 확인하세요.

VS2008, Win7

ASP.NET_WebBrowser.zip


브라우저를 실행시키면 바로 WebBrowser가 실행됩니다.


참고 - 코드프로젝트

Posted by 건깡