WPF에서 WebBrowser 컨트롤 스크립트 오류 없애기

안녕하세요. 언제나 휴일에 언휴예요.

WPF에서 WebBrower 문제점

WebBrowser 컨트롤은 매우 매력적인 컨트롤이라 생각합니다.

하지만 WPF에서 제공하는 WebBrowser 컨트롤은 스크립트 오류가 발생하였을 때 뜨는 팝업 창 때문에 사용할 수 없는 애물단지죠.

WinForms에서제공하는 WebBrowser 컨트롤은 ScriptErrorsSuppressed 속성만 true로 지정하면 되죠.

하지만 WPF에서 제공하는 WebBrowser 컨트롤은 그런 속성이 없습니다.

이러한 이유로 COM 관련 기술까지 들쳐가면 해결하려는 많은 시도들이 있더군요.

필자는 WPF에서 WinForm 기술을 마이그레이션하는 방법으로 해결하는 것을 제시할게요.

WPF 도구 상자에 WindowsFormHost가 있는데 이를 이용하는 거예요.

Xaml 편집

먼저 WebBroswer를 배치하고자 하는 곳에 WindowsFormHost를 배치하세요.

다음은 이를 보여주는 간단한 예제입니다. WindowsFormHost를 추가하고 Name을 wfh로 설정합니다.

그리고 Window에 Window_Loaded 이벤트 핸들러를 추가하세요.

    
        
    


C# 소스 코드(숨김 코드) 편집

C# 소스 코드(숨김 코드)로 가서 소스를 편집합니다.

System.Windows.Forms.WebBrowser 컨트롤을 생성합니다.

그리고 wfh의 자식으로 설정합니다.

이제 ScriptErrorSupressed를 true로 지정하면 문제를 해결할 수 있어요.

using System.Windows;

namespace WPF_WebBrowser_컨트롤_스크립트_오류_방지
{
    ///
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.WebBrowser wb = new System.Windows.Forms.WebBrowser();
            wfh.Child = wb;
            wb.ScriptErrorsSuppressed = true;
            wb.Navigate("https://ehpub.co.kr");
        }
    }
}

여러분께서 사용자 정의 컨트롤로 정의하여 래핑한 웹 브라우저 컨트롤을 만드는 것도 좋은 방법이겠죠.