C# winform使用 CefSharp 参数说明

CefSharp 参数说明

  1. 捕获按键,包括F12调出控制台调试、F5刷新;

  2. 添加缓存功能,指定缓存文件路径;

  3. 加载网页,等待时间用 Loading.gif动画代替;

  4. 禁用新弹窗;

  5. 隐藏鼠标右键,不弹无用菜单。

Winform 代码

using CefSharp;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CefSharpDemo
{
    public partial class CefSharpFrm : Form
    {

        ChromiumWebBrowser browser;

        public CefSharpFrm()
        {
            InitializeComponent();

            InitializeChromium("www.baidu.com");
        }

        /// <summary>
        /// 初始化浏览器并启动
        /// </summary>
        /// <param name="url">网址</param>
        public void InitializeChromium(String url)
        {
            CefSettings settings = new CefSettings
            {
                Locale = "zh-CN",// 设置语言
                PersistSessionCookies = true,  // cookies
                LogFile = System.IO.Path.GetFullPath("cache\\LogData"), // 用于调试日志的目录和文件名
                CachePath = System.IO.Path.GetFullPath("cache\\CacheFile") // 全局浏览器缓存的数据将存储在磁盘上的位置
            };

            settings.CefCommandLineArgs.Add("disable-gpu", "1"); // 禁用GPU加速
            settings.CefCommandLineArgs.Add("--disable-web-security", "1"); // 跨域
            Cef.Initialize(settings);

            // 创建浏览器组件
            browser = new ChromiumWebBrowser(url);

            browser.MenuHandler = new MenuHandler();// 禁用右键菜单
            browser.LifeSpanHandler = new LifeSpanHandler(); //禁用新弹窗
            browser.KeyboardHandler = new CEFKeyBoardHander();// 捕获按键,做对应操作,包括F12,调出控制台调试
            browser.FrameLoadStart += new EventHandler<FrameLoadStartEventArgs>(Browser_FrameLoadStart); // 网页加载
            browser.FrameLoadEnd += new EventHandler<FrameLoadEndEventArgs>(FrameEndFunc); //网页加载完成


            // 将其添加到表单并填充到表单窗口.
            this.Controls.Add(browser);
            browser.Dock = DockStyle.Fill;
        }


        #region 设置(web控件)加载动画

        private void Browser_FrameLoadStart(object sender, FrameLoadStartEventArgs e)
        {
            Loading_Show();
        }

        private delegate void dlgLoading_Show();
        private void Loading_Show()
        {
            if (lab_loading.InvokeRequired)
            {
                dlgLoading_Show dlShow = new dlgLoading_Show(Loading_Show);
                lab_loading.Invoke(dlShow, null);
            }
            else
            {
                this.lab_loading.Visible = true;
            }
        }
        private delegate void dlgLoading_Hide();
        private void Loading_Hide()
        {
            if (lab_loading.InvokeRequired)
            {
                dlgLoading_Show dlHide = new dlgLoading_Show(Loading_Hide);
                lab_loading.Invoke(dlHide, null);
            }
            else
            {
                this.lab_loading.Visible = false;
            }
        }
        private void FrameEndFunc(object sender, FrameLoadEndEventArgs e)
        {
            Loading_Hide();
        }
        #endregion

    }
}

MenuHandler (禁用右键菜单)

 internal class MenuHandler : IContextMenuHandler
 {
     public void OnBeforeContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,
         IMenuModel model)
     {
         model.Clear();
     }

     public bool OnContextMenuCommand(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,
         CefMenuCommand commandId, CefEventFlags eventFlags)
     {
         return false;
     }

     public void OnContextMenuDismissed(IWebBrowser webBrowser, IBrowser browser, IFrame frame)
     {

     }

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

LifeSpanHandler (禁用新弹窗)

 internal class LifeSpanHandler : ILifeSpanHandler
 {
     //弹出前触发的事件
     public bool OnBeforePopup(IWebBrowser webBrowser, IBrowser browser, IFrame frame, string targetUrl,
         string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures,
         IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
     {
         //使用源窗口打开链接,取消创建新窗口
         newBrowser = null;
         var chromiumWebBrowser = (ChromiumWebBrowser)webBrowser;
         chromiumWebBrowser.Load(targetUrl);
         return true;
     }

     public void OnAfterCreated(IWebBrowser chromiumWebBrowser, IBrowser browser)
     {

     }

     public bool DoClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
     {
         return true;
     }

     public void OnBeforeClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
     {

     }
 }

CEFKeyBoardHander (捕获按键,包括F12调出控制台调试、F5刷新)

 /// <summary>
 /// 监听按键
 /// </summary>
 public class CEFKeyBoardHander : IKeyboardHandler
 {
     public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey)
     {
         if (type == KeyType.KeyUp && Enum.IsDefined(typeof(Keys), windowsKeyCode))
         {
             var key = (Keys)windowsKeyCode;
             switch (key)
             {
                 case Keys.F12:
                     browser.ShowDevTools();
                     break;

                 case Keys.F5:
                     if (modifiers == CefEventFlags.ControlDown)
                     {
                         //ctrl+f5
                         browser.Reload(true);
                     }
                     else
                     {
                         //f5
                         browser.Reload();
                     }
                     break;
             }
         }
         return false;
     }

     public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut)
     {
         return false;
     }
 }
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值