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);
            textBox_uri.Text = 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;  

        }  

    }

}

你可能感兴趣的:(WebBrowser)