首页 > 代码库 > WPF中的WebBrowser

WPF中的WebBrowser

MainWindow.xaml.cs

//新窗口事件
               {                    Uri uri = new Uri(textBox_uri.Text);                    System.Windows.Forms.Integration.WindowsFormsHost host =                        new System.Windows.Forms.Integration.WindowsFormsHost();                    ExtendedWebBrowser webBrowser1 =                        new ExtendedWebBrowser();                    host.Child = webBrowser1;                    this.webGrid.Children.Add(host);                    webBrowser1.BeforeNewWindow +=                         new EventHandler<WebBrowserExtendedNavigatingEventArgs>(webBrowser1_BeforeNewWindow);                    webBrowser1.Url = uri;                    webBrowser1.ScriptErrorsSuppressed = true;//禁止弹出脚本错误                }
//新窗口事件
void webBrowser1_BeforeNewWindow(object sender, WebBrowserExtendedNavigatingEventArgs e)        {            e.Cancel = true;            ((ExtendedWebBrowser)sender).Navigate(e.Url);        }
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using System.Reflection;using System.IO;using Microsoft.Office.Interop.Word;using Word = Microsoft.Office.Interop.Word;using System.Windows.Xps.Packaging;

无标题

 

ExtendedWebBrowser.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace WPF_WebBrowser{    public class ExtendedWebBrowser : System.Windows.Forms.WebBrowser      {        System.Windows.Forms.AxHost.ConnectionPointCookie cookie;          WebBrowserExtendedEvents events;            //This method will be called to give you a chance to create your own event sink          protected override void CreateSink()          {              //MAKE SURE TO CALL THE BASE or the normal events won‘t fire              base.CreateSink();              events = new WebBrowserExtendedEvents(this);              cookie = new System.Windows.Forms.AxHost.ConnectionPointCookie(this.ActiveXInstance, events, typeof(DWebBrowserEvents2));          }            protected override void DetachSink()          {              if (null != cookie)              {                  cookie.Disconnect();                  cookie = null;              }              base.DetachSink();          }            //This new event will fire when the page is navigating          public event EventHandler<WebBrowserExtendedNavigatingEventArgs> BeforeNavigate;          public event EventHandler<WebBrowserExtendedNavigatingEventArgs> BeforeNewWindow;            protected void OnBeforeNewWindow(string url, out bool cancel)          {              EventHandler<WebBrowserExtendedNavigatingEventArgs> h = BeforeNewWindow;              WebBrowserExtendedNavigatingEventArgs args = new WebBrowserExtendedNavigatingEventArgs(url, null);              if (null != h)              {                  h(this, args);              }              cancel = args.Cancel;          }            protected void OnBeforeNavigate(string url, string frame, out bool cancel)          {              EventHandler<WebBrowserExtendedNavigatingEventArgs> h = BeforeNavigate;              WebBrowserExtendedNavigatingEventArgs args = new WebBrowserExtendedNavigatingEventArgs(url, frame);              if (null != h)              {                  h(this, args);              }              //Pass the cancellation chosen back out to the events              cancel = args.Cancel;          }          //This class will capture events from the WebBrowser          class WebBrowserExtendedEvents : System.Runtime.InteropServices.StandardOleMarshalObject, DWebBrowserEvents2          {              ExtendedWebBrowser _Browser;              public WebBrowserExtendedEvents(ExtendedWebBrowser browser) { _Browser = browser; }                //Implement whichever events you wish              public void BeforeNavigate2(object pDisp, ref object URL, ref object flags, ref object targetFrameName, ref object postData, ref object headers, ref bool cancel)              {                  _Browser.OnBeforeNavigate((string)URL, (string)targetFrameName, out cancel);              }                public void NewWindow3(object pDisp, ref bool cancel, ref object flags, ref object URLContext, ref object URL)              {                  _Browser.OnBeforeNewWindow((string)URL, out cancel);              }            }          [System.Runtime.InteropServices.ComImport(), System.Runtime.InteropServices.Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"),          System.Runtime.InteropServices.InterfaceTypeAttribute(System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIDispatch),          System.Runtime.InteropServices.TypeLibType(System.Runtime.InteropServices.TypeLibTypeFlags.FHidden)]          public interface DWebBrowserEvents2          {                [System.Runtime.InteropServices.DispId(250)]              void BeforeNavigate2(                  [System.Runtime.InteropServices.In,                  System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.IDispatch)] object pDisp,                  [System.Runtime.InteropServices.In] ref object URL,                  [System.Runtime.InteropServices.In] ref object flags,                  [System.Runtime.InteropServices.In] ref object targetFrameName, [System.Runtime.InteropServices.In] ref object postData,                  [System.Runtime.InteropServices.In] ref object headers,                  [System.Runtime.InteropServices.In,                  System.Runtime.InteropServices.Out] ref bool cancel);              [System.Runtime.InteropServices.DispId(273)]              void NewWindow3(                  [System.Runtime.InteropServices.In,                  System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.IDispatch)] object pDisp,                  [System.Runtime.InteropServices.In, System.Runtime.InteropServices.Out] ref bool cancel,                  [System.Runtime.InteropServices.In] ref object flags,                  [System.Runtime.InteropServices.In] ref object URLContext,                  [System.Runtime.InteropServices.In] ref object URL);            }      }        public class WebBrowserExtendedNavigatingEventArgs : System.ComponentModel.CancelEventArgs      {          private string _Url;          public string Url          {              get { return _Url; }          }            private string _Frame;          public string Frame          {              get { return _Frame; }          }            public WebBrowserExtendedNavigatingEventArgs(string url, string frame)              : base()          {              _Url = url;              _Frame = frame;          }      }}