新建WinFrom项目

 新建用户控件:WebView.cs

 引用相关dll

 编写代码如下:

namespace ChromiumWebBrowser {     public partial class WebView : UserControl     {         #region 初始化浏览器控件         public CefSharp.WinForms.ChromiumWebBrowser webBrower;         private bool _EnableRightMenu = false;         ///

        /// 是否启用右键菜单         ///         public bool EnableRightMenu         {             get { return _EnableRightMenu; }             set { _EnableRightMenu = value; }         }

        public List cookieList = null;

        public bool isEnabledJWT = false;

        public string path;

        ///

        /// 初始函数         ///         public WebView()         {             InitializeComponent();         }

        ///

        /// 页面加载         ///         ///         protected override void OnLoad(EventArgs e)         {             base.OnLoad(e);         }

        #endregion

        #region 加载调用

        ///

        /// 根据路径获取页面控件_不带JS交互→(下载)         ///         ///         public void getWebBrowserByPath(string strPath)         {             webBrower = new CefSharp.WinForms.ChromiumWebBrowser(strPath);             webBrower.Dock = DockStyle.Fill;//填充方式                         this.Controls.Add(webBrower);             webBrower.DownloadHandler = new DownloadHandler();//下载文件             webBrower.MenuHandler = new MenuHandler();//右键菜单         }

        ///

        /// 根据路径获取页面控件_不带JS交互→(下载)         ///         ///         public virtual void SetUrl(string strPath)         {             webBrower = new CefSharp.WinForms.ChromiumWebBrowser(strPath);             webBrower.Dock = DockStyle.Fill;//填充方式                  if (!this.EnableRightMenu)                 webBrower.MenuHandler = new StopMenuHandler();             this.Controls.Add(webBrower);         }

        ///

        /// 根据路径获取页面控件_带JS交互→(下载)         ///         ///         public void getWebBrowserByPathAndParam(string strPath, object obj)         {             this.Controls.Clear();             path = strPath;             //添加安全证书验证的过滤             if (!CefSharp.Cef.IsInitialized)             {                 var settings = new CefSettings();                 //安全证书                 settings.CefCommandLineArgs.Add("--ignore-urlfetcher-cert-requests", "1");                 settings.CefCommandLineArgs.Add("--ignore-certificate-errors", "1");                 CefSharp.Cef.Initialize(settings);             }

            webBrower = new CefSharp.WinForms.ChromiumWebBrowser(strPath);             webBrower.Dock = DockStyle.Fill;//填充方式             this.Controls.Add(webBrower);             webBrower.DownloadHandler = new DownloadHandler();//下载文件              webBrower.MenuHandler = new MenuHandler();//右键菜单             string domain = strPath.Split('/')[2].Split(':')[0].ToString();             if (cookieList != null && cookieList.Count > 0)             {                 foreach (Cookie cookie in cookieList)                 {                     //CefSharp.Cef.GetGlobalCookieManager().SetCookieAsync(strPath, cookie);                     Cef.GetGlobalCookieManager().SetStoragePath(Environment.CurrentDirectory, true);                     var cook = Cef.GetGlobalCookieManager();                     cook.SetCookieAsync(strPath, new CefSharp.Cookie                     {                         Creation = DateTime.Now,                         Domain = domain,                         Name = cookie.Name,                         Value = cookie.Value,                         Expires = DateTime.Now.AddDays(7)                     });                 }             }

            //Js交互数据             webBrower.RegisterJsObject("jsObj", obj, false);         }

        private void WebView_SizeChanged(object sender, EventArgs e)         {             if (webBrower != null)             {                 webBrower.Load(path);             }         }

        ///

        /// 根据路径获取页面控件_带JS交互→(打印)         ///         ///         ///         ///         public void getWebBrowserByPathAndPrint(string strPath, object obj)         {             this.Controls.Clear();             webBrower = new CefSharp.WinForms.ChromiumWebBrowser(strPath);             webBrower.Dock = DockStyle.Fill;//填充方式             this.Controls.Add(webBrower);             webBrower.DownloadHandler = new PrintHandler();//下载文件                        webBrower.MenuHandler = new MenuHandler();//右键菜单

            //Js交互数据             webBrower.RegisterJsObject("jsObj", obj, false);

        }

        #endregion

        #region 设置浏览器委托         ///

        /// 设置浏览器控件         ///         public delegate void SetWebBroserDelegate();

        private void SetWebBroser(CefSharp.WinForms.ChromiumWebBrowser uc)         {             //if(this.Controls){}         }

        #endregion

        #region 控件打印         ///

        /// 控件打印         ///         public void PrintWebControle()         {             webBrower.Print();         }

        #endregion

    }

    #region 下载接口重写

    ///

    /// 下载事件     ///     internal class DownloadHandler : IDownloadHandler     {         ///                      /// 下载前事件         ///         ///         ///         ///         public void OnBeforeDownload(IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback)         {             if (!callback.IsDisposed)             {                 using (callback)                 {                     callback.Continue(@"C:\Users\" +                             System.Security.Principal.WindowsIdentity.GetCurrent().Name +                             @"\Downloads\" +                             downloadItem.SuggestedFileName,//文件下载默认路径设置                         showDialog: true);//是否显示文件路径窗体                 }             }         }

        ///

        /// 下载修改事件         ///         ///         ///         ///         public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)         {             //downloadItem.IsCancelled = false;           }     }

    #endregion

    #region 页面右键菜单接口重写     ///

    /// 页面右键菜单     ///     internal class MenuHandler : IContextMenuHandler     {         private const int Cut = 26502;//剪切         private const int Copy = 26503;//复制         private const int Paste = 26504;//粘贴         private const int Delete = 26505;//删除         private const int SelectAll = 26506;//全选

        private const int ShowDevTools = 26500;//显示工具箱         private const int CloseDevTools = 26501;//关闭工具箱

        void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)         {             model.Clear();             model.AddItem((CefMenuCommand)Cut, "剪切");             model.AddItem((CefMenuCommand)Copy, "复制");             model.AddItem((CefMenuCommand)Paste, "粘贴");             model.AddItem((CefMenuCommand)Delete, "删除");             model.AddItem((CefMenuCommand)SelectAll, "全选");             model.AddItem((CefMenuCommand)ShowDevTools, "显示工具箱");             model.AddItem((CefMenuCommand)CloseDevTools, "关闭工具箱");         }

        bool IContextMenuHandler.OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)         {

            try             {                 switch ((int)commandId)                 {                     case Cut://剪切                         browserControl.Cut();                         break;                     case Copy://复制                         browserControl.Copy();                         break;                     case Paste://粘贴                         browserControl.Paste();                         break;                     case Delete://删除                         browserControl.Delete();                         break;                     case SelectAll://全选                         browserControl.SelectAll();                         break;                     case ShowDevTools://显示工具箱                         browserControl.ShowDevTools();                         break;                     case CloseDevTools://关闭工具箱                         browserControl.CloseDevTools();                         break;                 }             }             catch (Exception)             {             }

            return false;         }

        void IContextMenuHandler.OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame)         {

        }

        bool IContextMenuHandler.RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback)         {             return false;         }     }

    ///

    /// 禁用嵌套页面的右键菜单     ///     public class StopMenuHandler : IContextMenuHandler     {         public void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)         {             model.Clear();         }         public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)         {             return false;         }         public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame)         {         }         public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback)         {             return false;         }     }

    #endregion

    #region 根据下载接口重写实现打印功能→不弹预览窗口

    ///

    /// 下载事件     ///     internal class PrintHandler : IDownloadHandler     {         ///                      /// 下载前事件         ///         ///         ///         ///         public void OnBeforeDownload(IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback)         {             if (!callback.IsDisposed)             {                 using (callback)                 {                     //判断要下载的文件夹是否存在,不存在则创建                     string DownPath = @"C:\DownLoadFile";                     if (Directory.Exists(DownPath) == false)                     {                         Directory.CreateDirectory(DownPath);                     }                     //创建文件夹后下载该文件                     callback.Continue(DownPath + @"\" +                            downloadItem.SuggestedFileName,//文件下载默认路径设置                        showDialog: false);//是否显示文件路径窗体                                 }             }         }

        ///

        /// 下载修改事件         ///         ///         ///         ///         public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)         {             if (downloadItem.IsComplete)//如果下载已经完成             {                 PdfDocument doc = new PdfDocument();                 doc.LoadFromFile(downloadItem.FullPath);                 //打印下载的文件                 doc.PrintDocument.Print();                 //调取打印之后删除该文件                 FileInfo downFile = new FileInfo(downloadItem.FullPath);                 downFile.Delete();             }         }     }     #endregion

}

窗体调用方法如下所示:

namespace ChromiumWebBrowser {     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();         }

        ///

        /// 窗体加载事件         ///         ///         ///         private void Form1_Load(object sender, EventArgs e)         {             //实例化WebView控件             WebView w = new WebView();             w.Dock = DockStyle.Fill;             this.pnBack.Controls.Add(w);             //调用不带JS交互的生成方法             w.getWebBrowserByPath("https://www.baidu.com/");             调用带JS交互的生成方法             //JsEvent js = new JsEvent();             //w.getWebBrowserByPathAndParam("https://127.0.0.1/test.html/", js);         }

        ///

        /// 窗体关闭事件         ///         ///         ///

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)         {             try             {                 //杀掉谷歌浏览器进程                 System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName("CefSharp.BrowserSubprocess");                 if (ps.Length > 1)                 {                     for (int i = 1; i < ps.Length; i++)                     {                         ps[i].Kill();                     }                 }             }             catch (Exception ex)             {             }         }     } }

实现效果:

 右键菜单可调试页面,如下图所示:

JS 前端交互界面如下图所示:

 

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。