WebBrowserHelper.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System;
  2. using System.ComponentModel;
  3. using System.Globalization;
  4. using System.Windows.Threading;
  5. namespace Muchinfo.WPF.Controls.WebBrowser
  6. {
  7. public partial class WebBrowserHelper
  8. {
  9. private System.Windows.Controls.WebBrowser _webBrowser;
  10. private object _cookie;
  11. public event CancelEventHandler NewWindow;
  12. public WebBrowserHelper(System.Windows.Controls.WebBrowser webBrowser)
  13. {
  14. if (webBrowser == null)
  15. throw new ArgumentNullException("webBrowser");
  16. _webBrowser = webBrowser;
  17. _webBrowser.Dispatcher.BeginInvoke(new Action(Attach), DispatcherPriority.Loaded);
  18. }
  19. public void Disconnect()
  20. {
  21. if (_cookie != null)
  22. {
  23. _cookie.ReflectInvokeMethod("Disconnect", new Type[] { }, null);
  24. _cookie = null;
  25. }
  26. }
  27. private void Attach()
  28. {
  29. var axIWebBrowser2 = _webBrowser.ReflectGetProperty("AxIWebBrowser2");
  30. var webBrowserEvent = new WebBrowserEvent(this);
  31. var cookieType = typeof(System.Windows.Controls.WebBrowser).Assembly.GetType("MS.Internal.Controls.ConnectionPointCookie");
  32. _cookie = Activator.CreateInstance(
  33. cookieType,
  34. ReflectionService.BindingFlags,
  35. null,
  36. new[] { axIWebBrowser2, webBrowserEvent, typeof(DWebBrowserEvents2) },
  37. CultureInfo.CurrentUICulture);
  38. }
  39. private void OnNewWindow(ref bool cancel)
  40. {
  41. var eventArgs = new CancelEventArgs(cancel);
  42. if (NewWindow != null)
  43. {
  44. NewWindow(_webBrowser, eventArgs);
  45. cancel = eventArgs.Cancel;
  46. }
  47. }
  48. }
  49. }