• [Winfrom]Cefsharp配置与初始化


    摘要

    在做客户端程序的时候,本来打算使用wpf的,但在内嵌cefsharp的时候,发现输入法有问题,所以使用了winform作为cefsharp的容器。

    系列文章

    CefSharp 在同一窗口打开链接的方法

    [Winform]CefSharp ——js调用c#方法

    cefsharp wpf 中文输入问题解决方法

    [Winfrom]Cefsharp配置与初始化

    初始化与配置

        /// <summary>
            /// 浏览器配置
            /// </summary>
            private CefSharp.CefSettings _settings;
            /// <summary>
            /// 浏览器对象
            /// </summary>
            CefSharp.WinForms.ChromiumWebBrowser _webView;
            /// <summary>
            /// 加载页面
            /// </summary>
            /// <param name="url"></param>
            private void LoadPage(string pageName)
            {
                string url = string.Format(StaticParameter.htmlPathFormat, StaticParameter.ExeDir, pageName);
                try
                {
                    if (_webView == null)
                    {
                        _settings = new CefSharp.CefSettings();
                        _settings.UserAgent = StaticParameter.UserAgent;
                        // Enable WebRTC       
                        _settings.CefCommandLineArgs.Add("enable-media-stream", "1");
                        //Disable GPU Acceleration
                        _settings.CefCommandLineArgs.Add("disable-gpu", "1");
    
                        // Don't use a proxy server, always make direct connections. Overrides any other proxy server flags that are passed.
                        // Slightly improves Cef initialize time as it won't attempt to resolve a proxy
                        _settings.CefCommandLineArgs.Add("no-proxy-server", "1");
                        _settings.Locale = "zh-CN";
                        //缓存路径
                        _settings.CachePath = StaticParameter.ExeDir + "/BrowserCache";
                        //浏览器引擎的语言
                        _settings.AcceptLanguageList = "zh-CN,zh;q=0.8";
                        _settings.LocalesDirPath = StaticParameter.ExeDir + "/localeDir";
                        //日志文件
                        _settings.LogFile = StaticParameter.ExeDir + "/LogData";
                        _settings.PersistSessionCookies = true;
                        _settings.UserDataPath = StaticParameter.ExeDir + "/userData";
    
                        CefSharp.Cef.Initialize(_settings);
                        _webView = new CefSharp.WinForms.ChromiumWebBrowser(url)
                        {
                            BrowserSettings =
                            {
                                DefaultEncoding = "UTF-8"
                            },
                            MenuHandler = new MenuHandler(),
                            LifeSpanHandler = new OpenPageSelf(),
                            Dock = DockStyle.Fill
                        };
                        ScriptCallbackManager scriptManager = new ScriptCallbackManager();
                        scriptManager.MiniWinidowHandler += scriptManager_MiniWinidowHandler;
                        _webView.LoadError += _webView_LoadError;
                        _webView.RegisterJsObject("googleBrower", scriptManager, 
    new CefSharp.BindingOptions { CamelCaseJavascriptNames = false }); this.Controls.Add(_webView); } else { _webView.Load(url); } } catch (Exception ex) { LogInfoData.WriteLog(new LogInfo { IsSend = false, Message = ex.Message, Op = "loadpage_err" }); } }

    禁用右键菜单

        /// <summary>
        /// 禁用右键菜单
        /// </summary>
        internal class MenuHandler : 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; } }

    加载页面失败

           void _webView_LoadError(object sender, CefSharp.LoadErrorEventArgs e)
            {
                MessageBox.Show("加载页面失败,请退出客户端进行重试");
                Quit();
            }

    关闭cefsharp

       CefSharp.Cef.Shutdown();
                    if (_webView != null)
                    {
                        _webView.Dispose();
                    }

    刷新页面

     //刷新
    _webView.GetBrowser().Reload();

    总结

    安装cefsharp可以使用nuget进行安装。

  • 相关阅读:
    论 IntStream 和 for 循环的速度
    单链线性表的基本操作--创建,插入,删除,查看,打印
    Android中的异步处理方式
    Kotlin 集合变换与序列
    Kotlin Lazy延迟初始化
    协程及Kotlin协程
    Java 注解
    Android 事件传递机制进阶
    Java 异常
    Java 多线程及线程间通信(Synchronized和Volatile关键字)
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/7168952.html
Copyright © 2020-2023  润新知