[Winfrom]Cefsharp配置与初始化
摘要
在做客户端程序的时候,本来打算使用wpf的,但在内嵌cefsharp的时候,发现输入法有问题,所以使用了winform作为cefsharp的容器。
系列文章
[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", "");
//Disable GPU Acceleration
_settings.CefCommandLineArgs.Add("disable-gpu", ""); // 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", "");
_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进行安装。
[Winfrom]Cefsharp配置与初始化的更多相关文章
- 让Spring Boot项目启动时可以根据自定义配置决定初始化哪些Bean
让Spring Boot项目启动时可以根据自定义配置决定初始化哪些Bean 问题描述 实现思路 思路一 [不符合要求] 思路二[满足要求] 思路三[未试验] 问题描述 目前我工作环境下,后端主要的框架 ...
- 三叔学FPGA系列之二:Cyclone V中的POR、配置、初始化,以及复位
对于FPGA内部的复位,之前一直比较迷,这两天仔细研究官方数据手册,解开了心中的诸多疑惑,感觉自己又进步了呢..... 原创不易,转载请转原文,注明出处,谢谢. 一.关于POR(Power-On ...
- 在过滤器中获取在web.xml配置的初始化参数
在过滤器中获取在web.xml配置的初始化参数 例如 <filter> <filter-name>cross-origin</filter-name> < ...
- mybatis源码分析--如何加载配置及初始化
简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository ...
- nginx&http 第二章 ngx 事件event配置等初始化
event事件模块,配置分为两层:ngx_events_module 事件模块 和 ngx_event_core_module 事件核心模块.ngx_events_module:模块类型NGX_COR ...
- saltstack之(七)配置管理系统初始化init
saltstack的配置管理分环境管理:①.base为基础环境,一般会存放一些所有服务器都使用的配置管理信息.②.dev为开发测试环境,一般会存放一些开发测试服务器使用的配置管理信息.③.pro为线上 ...
- CodeWarrior 10 配置Jlint初始化文件
新建一个项目之后,飞思卡尔的仿真器的配置不如德州仪器那么简单.他需要一些配置. 当我们新建一个工程后,可以采取如下步骤配置Jlint: 1.右击工程名,选择属性. 2.在Run/Debug Setti ...
- STM32之RTC配置与初始化
void rtc_init() { //让电源和后备寄存器使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE) ...
- FFmpeg(14)-使用NDK、C++完成EGL,display, surface, context的配置和初始化
EGL 用它开发需要做哪些事情. DIsplay 与原生窗口建立链接.EGL在Android中可以用java调,也可以用C++调. EGLDisplay eglGetDisplay ...
随机推荐
- 011_自定义mac通知的时长
打开终端(找不到的点击 Mac 屏幕右上角放大镜按钮,Spotlight 搜索 “终端”),粘入下面这行命令,回车就行了.注意最后的 # 替换成你希望通知中心横幅停留的秒数,比如 15.default ...
- Selenium WebDriver如何模拟复制和粘贴
以最简单的例子来说明,我们需要在bing搜索引擎中,输入并查询“Selenium自动化测试”几个字.可以很快就写出如下代码: String queryString = "Selenium自动 ...
- MySQL root密码忘记后更优雅的解决方法
MySQL root密码忘记后更优雅的解决方法 https://www.jb51.net/article/143453.htm /usr/bin/mysqld_safe --defaults-file ...
- Android 拍摄(横\竖屏)视频的懒人之路
想一想,我们聊过AudioReord,AudioTrack,MediaPlayer,那多媒体四大金刚,就剩下了MediaRecorder了(SoundPool?我这里信号不好···).其实MediaR ...
- pixel像素基础
地址:http://www.imooc.com/video/9564 dp(安卓),pt(iphone)是物理像素 ppi是由物理像素确定的 一英寸内有多少个像素渲染,ppi越高,图片越清晰 1px ...
- 去除Android APP里面的广告
如何去除Android游戏软件中的广告:很多时候,我们下载好一款Andriod游戏软件,却被游戏软件中的广告弄的很烦.不停跳动的广告让人觉得非常不爽,而且在玩游戏的时候,还有可能点击到广告,中断游戏. ...
- java iterator(迭代器)
任何容器类,都必须有某种方式可以插入元素并将它们再次取出,毕竟持有事物是容器最基本的工作,对于List,add()插入fang,get()取出,如果从更高层的角度思考,会发现这里有个确定:要用容器,必 ...
- 基于Prometheus的Pushgateway实战
一.Pushgateway 简介 Pushgateway 是 Prometheus 生态中一个重要工具,使用它的原因主要是: Prometheus 采用 pull 模式,可能由于不在一个子网或者防火墙 ...
- EntityFrameWork 图解
- 【LOJ】#2269. 「SDOI2017」切树游戏
题解 把所有的数组一开始就FWT好然后再IFWT回去可以减小常数 从13s跑到0.7s-- 可以参照immortalCO的论文,感受一下毒瘤的动态动态DP 就是用数据结构维护线性递推的矩阵的乘积 由于 ...