WPF WebBrowser 컨트롤에서 SHDocVw.IWebBrowser2 인터페이스를 구하는 방법 및 순수 WPF 웹 브라우저 컨트롤 소개
예전에 올라온 질문 중에 답변만 하고 코드를 제공하지 않은 적이 있는데요.
WPF WebBrowser control의 자식 창이 close 되기 전 Navgate 재호출 문제
; https://www.sysnet.pe.kr/3/0/1187
WPF에서 제공되는 WebBrowser의 경우 추상화를 너무 높게 하다 보니 고유의 IWebBrowser2 인터페이스가 가진 기능을 모두 제공하지 않고 있습니다. 하지만 단지 내부적으로 감춰놓은 것일 뿐 WebBrowser 컨트롤 자체가 완전히 새로운 것은 아니기 때문에 다음과 같이 기존 WinForm에서 얻을 수 있었던 IWebBrowser2 인터페이스를 Reflection을 이용해 그대로 가져올 수 있습니다.
<Window x:Class="WebBrowserResourceExceptionTest.BrowserWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="500" Width="600">
<Grid x:Name="xRootGrid">
<WebBrowser x:Name="xWebBrowser" />
</Grid>
</Window>
using System.Reflection;
using System.Windows;
namespace WebBrowserResourceExceptionTest
{
public partial class BrowserWindow : Window
{
public BrowserWindow()
{
InitializeComponent();
}
public bool IsBusy
{
get
{
PropertyInfo propInfo = this.xWebBrowser.GetType().GetProperty("AxIWebBrowser2",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
object objValue = propInfo.GetValue(this.xWebBrowser);
SHDocVw.IWebBrowser2 webBrowser = objValue as SHDocVw.IWebBrowser2;
return webBrowser.Busy;
}
}
}
}
참고로, SHDocVw.IWebBrowser2 인터페이스는 참조 추가 대화상자에서 COM 객체인 "Microsoft Internet Controls"를 추가해야 합니다.
그나저나, 나중에 시간 나면 C/C++에 준하는 사용자 정의를 한번 해봐야겠군요. ^^
WebBrowser Customization (Part 2)
; https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa770042(v=vs.85)
이제나 저제나 기다렸던 마이크로소프트의 순수 WPF WebBrowser 컨트롤이 여전히 안 나오는 지금 상황에 그나마 기쁜 소식이 하나 있습니다. 기다리다 지친 외부 프로그래머들이 chromium을 이용해 순수 WPF 웹 브라우저 컨트롤을 오픈소스로 직접 만들어 공개를 했습니다. (2009년도 소식이군요. ^^)
A Real WPF WebBrowser
; http://chriscavanagh.wordpress.com/2009/08/25/a-real-wpf-webbrowser/
WPF Chromium WebBrowser control
; http://wpfchromium.codeplex.com/
위의 글에도 나오지만, (ActiveX를 사용하는 것이 아닌) 완전하게 WPF 컨트롤로 구현된 것이기 때문에 다음과 같은 효과들이 가능하다고 합니다. ^^
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]