cefsharp 与webbrowser简单对比概述

有个项目需要做个简单浏览器,从网上了解到几个相关的组件有winform自带的IE内核的WebBrowser,有第三方组件谷歌内核的webkit、cefsharp、chromiumfx等。

一开始是用的webbrowser 后来发现有些css样式是不兼容的于是又开始研究webkit这个有些css样式同样不能用,然后才开始研究cefsharp,从网上下载了57版本的但总是运行不起来后来发现装上vs中C++公共工具才行(注意即使装上vcredist_x86这个运行库也是不行),这个你不能要求人家客户装vs啊,后来也没找到到底是哪个动态库的问题。之后就下载了47版本。

按键事件

   不同于webbrowser通过事件PreviewKeyDown捕获键盘按键,cefsharp是通过实现接口IKeyboardHandler赋值委托KeyboardHandler来实现的

 web.KeyboardHandler = new CefKeyboardHandler(m_cell as CellControl);
 public class CefKeyboardHandler : IKeyboardHandler
    {
        private CellControl m_cell;

        /// <summary>
        /// 命名代理
        /// </summary>
        /// <param name="con"></param>
        /// <param name="text"></param>
        private delegate void PreKeyEventHandler(object sender,object webBrowser,int windowsKeyCode);

        public CefKeyboardHandler(CellControl cell)
        {
            m_cell = cell;
        }
        public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey)
        {
            return true;
        }
        public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut)
        {
           m_cell.Invoke(new PreKeyEventHandler(PreKeyEvent),m_cell, browserControl, windowsKeyCode);
            return true;
        }

        private void PreKeyEvent(object sender, object webBrowser, int windowsKeyCode)
        {
            CellControl cell = sender as CellControl;
            cell.ControlPreviewKeyDown(webBrowser , new System.Windows.Forms.PreviewKeyDownEventArgs((Keys)windowsKeyCode));
            if (windowsKeyCode == (int)(Keys.Delete))
            {
                cell.Controls.Clear();
            }
           
        }



代理设置

   公司网络是需要代理才能上外网,webbrowser可以自动获取已经设置好的代理,cefsharp网上说可以通过setting.CefCommandLineArgs.Add("--proxy-server""http://127.0.0.1:8877");这个方式设置代理,可是不知道为啥我这边一直不行,后来发现一个通过实现接口IRequestHandler赋值委托RequestHandler来设置代理可行

  webBrowser.RequestHandler = new CefRequest();
 public class CefRequest : IRequestHandler
    {
        //
        // 摘要:
        //     Called when the browser needs credentials from the user.
        //
        // 参数:
        // 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值