zoukankan      html  css  js  c++  java
  • [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进行安装。

  • 相关阅读:
    Spark Streaming:大规模流式数据处理的新贵
    HBase源码学习系列
    Hadoop源码分析之Configuration
    sql server存储引擎启动错误(SQL Server could not spawn FRunCM thread)
    Redis(1.15)Redis监控(待写)
    Redis(1.14)Redis日常管理与维护
    Redis(1.13)Redis cluster 分布式集群手动配置
    (5.3.5)数据库迁移——数据库与文件组的位置迁移(同一实例)
    Redis(1.12)Redis cluster搭建常见错误
    Redis(1.11)Redis4.0.11 cluster 分布式集群搭建
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/7168952.html
Copyright © 2011-2022 走看看