.NET (WPF and Windows Forms) bindings for the Chromium Embedded Framework

web: https://github.com/cefsharp/CefSharp

nuget: Install-Package CefSharp.Wpf

比较流行的第三方内嵌浏览器组件,虽然还是一如既往的坑,但是最起码很多人踩,所以就用它了。


更多相关项目,请访问代码沉淀目录

重要提示:请注意项目的版本,以官方最新版本为准。


在很久很久之前,就有很多人提过在一个窗体程序内嵌入浏览器,于是我最后也用到了,于是就记录一下踩得坑,留作备忘。

1. cef子进程的开始与关闭,如果你的程序出现了子进程的这种问题,请调用:

CefSharp.Cef.Shutdown();

2. 右键菜单问题,很多配置cefsharp都考虑到了,虽然实现起来各种麻烦。

class MyCefMenuHandler : CefSharp.IContextMenuHandler
{
// 其它方法的实现不是重点。
// 其它参数也不是重点。
public void OnBeforeContextMenu(IMenuModel model)
{
model.Clear();
}
}

3. 网页语言问题,很多网站会根据请求头的区域标识,返回对应的语言的网页,比如微信,所以我们要标识我首选就是中文,先给我返回我认识的国语网页。

    // 其他方法不是重点(不过实现一次接口你都想死,太多方法了!)
// 其他参数也不是重点
// 一定要重新覆盖访问头,直接赋值没卵用!
public CefReturnValue OnBeforeResourceLoad(IRequest request)
{
var headers = request.Headers;
headers.Set("accept-language", "zh-CN,zh;q=0.8,en;q=0.6");
request.Headers = headers;
return CefSharp.CefReturnValue.Continue;
}

4. 大家可能都遇到的问题,WPF专用的CefSharp控件,不支持设计时,这你就没法子了,我是觉得烦就后台生成浏览器控件的实例,这一帮官方的开发人员也真是够懒的,到现在了还不添加设计时支持,真是吃干饭的。

5. 我看到exe同级目录下那么多dll,就蛋疼,于是就做了资源转移,其他dll用的“Costura.Fody”,至于Cef方面的,就只能老老实实转一大圈了。

 // 首先,让Costura.Fody组件不合并CefSharp相关的资源文件,因为非托管啥的资源还有子线程,你不可能真的都打包。
// FodyWeavers.xml
<Weavers>
<Costura ExcludeAssemblies="CefSharp|CefSharp.Core|CefSharp.Wpf"/>
</Weavers>
// 接下来,我们不是把dll挪到别的目录么,程序启动搜索dll,就要多一些地方,比如我放在子目录里。
// App.Config
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="x86\cef" />
</assemblyBinding>
</runtime>
</configuration>
// 接下来,把cef相关的20个文件,locales目录的53个文件全扔到x86\cef目录里,并修改Cef初始化配置。
internal static void Build()
{
string lib, browser, locales, res;
// Assigning file paths to varialbles
lib = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86\cef\libcef.dll");
browser = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86\cef\CefSharp.BrowserSubprocess.exe");
locales = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86\cef\locales\");
res = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86\cef\");
var settings = new CefSettings();
settings.BrowserSubprocessPath = browser;
settings.LocalesDirPath = locales;
settings.ResourcesDirPath = res;
Cef.Initialize(settings, true, null);
}

【整理总结】代码沉淀 - CefSharp - 比较流行的第三方内嵌浏览器组件的更多相关文章

  1. 【整理总结】代码沉淀 - Caliburn.Micro - MV*模式短小精悍的框架

    Caliburn.Micro - Xaml made easy. web: https://github.com/Caliburn-Micro/Caliburn.Microdocument: http ...

  2. 【代码沉淀】 - EPPlus - 操作xlsx表格文件

    EPPlus - Create advanced Excel spreadsheets on the server.web: http://epplus.codeplex.com/nuget: Ins ...

  3. 转-使用 CefSharp 在 C# App 中嵌入 Chrome 浏览器

    使用 CefSharp 在 C# App 中嵌入 Chrome 浏览器 2016-09-23    分类:.NET开发.编程开发.首页精华0人评论 分享到:更多3 本文由码农网 – 小峰原创翻译,转载 ...

  4. C#程序员整理的Unity 3D笔记(十三):Unity 3D基于组件的思想

    如果你接触过<设计模式>.软件架构的编程思想,就会知道优秀的设计准则:“组合优于继承的”. 这句话很简短,但开始学习OOP的时候,真切的是—-不太好理解(以我个人当初学习为例). OOP的 ...

  5. WPF内嵌代码和后台代码简单混合使用

    下面实例展示了WPF内嵌代码和后台代码混合使用,一个简单基础的实例: xaml文件: <Window x:Class="WPF内嵌代码和后台代码混合使用.MainWindow" ...

  6. 原生js实现tab选项卡里内嵌图片滚动特效代码

    <!DOCTYPE HTML><html lang="en-US"><head><meta charset="UTF-8&quo ...

  7. 修复CefSharp浏览器组件中文输入Bug

    概述 最近在win10上开发wpf应用,需要将CefSharp中wpf版本的浏览器组件(版本号v51.0.0)嵌入到应用中,但是发现不支持中文输入,GitHub上有这个问题的描述,参照其提到的方法可以 ...

  8. boost学习 内嵌类型检测 与 any 的代码练习

    本文是学习 boost源码的一些练习 参考文章来自 刘未鹏 C++的罗浮宫(http://blog.csdn.net/pongba) 目录 http://blog.csdn.net/pongba/ar ...

  9. 使用Themeleaf时, HTML内嵌的JS代码需要注意< 和 >的问题

    如果你使用了Themeleaf, 你的HTML文件又使用了内嵌的JS代码,那么一定要注意 你的JS代码必须用这样用: <script> /*<![CDATA[*/ var a = 6 ...

随机推荐

  1. Linux免密码登陆

    A电脑实现不用密码登陆到B电脑! vim /etc/ssh/sshd_config   编辑文件 01.在A电脑上生成ssh密钥 ssh-keygen -t rsa02.把A电脑生成的id_rsa.p ...

  2. 《Python》 面向对象三大特性之继承

    一.继承大纲: 继承和抽象(两个概念) 1.单继承: 语法: 父类.基类.超类 子类.派生类 继承与重用:子类可以使用父类中的名字(变量和方法) 继承与派生:子类在父类的基础上又新创建了自己需要的方法 ...

  3. (C/C++学习笔记) 十六. 预处理

    十六. 预处理 ● 关键字typeof 作用: 为一个已有的数据类型起一个或多个别名(alias), 从而增加了代码的可读性. typedef known_type_name new_type_nam ...

  4. Swift网络封装库Moya中文手册之Providers

    Providers 使用Moya,你可以通过一个 MoyaProvider 的实例发送所有网络请求,通过枚举来指定你要访问的具体API.在配置你的 Endpoint 之后,你差不多就做好了基础配置: ...

  5. 使用Query进行HQL语句查询和SQL语句查询

    HQL的语法比较简单,与普通SQL的区别之处是针对对象的不同,在查询语句中将sql中的表名替换成了sql中的持久化类名,因为hibernate机制是基于对象进行查询的. 不带参数的查询,语句是“fro ...

  6. Femtocell家庭基站通信截获、伪造任意短信漏洞

    阿里移动安全团队与中国泰尔实验室无线技术部的通信专家们一起,联合对国内运营商某型Femtocell基站进行了安全分析,发现多枚重大漏洞,可导致用户的短信.通话.数据流量被窃听.恶意攻击者可以在免费申领 ...

  7. centos 7 NAT模式网络设置

    打开虚拟机.菜单栏点击‘编辑’ -> ‘虚拟网络设置’. 注意下图红色框地方的设置: 然后进入linux系统,编辑网络配置: vi /etc/sysconfig/network-scripts/ ...

  8. MAC中安卓开发环境的下载

    今天终于为我的Macbook Pro Retina搭建好了Android开发环境,几经折磨,差点放弃了: 总结如下:1.最好选择ADT Bundle,这里面已经集成好了Eclipse.ADT.Andr ...

  9. HihoCoder - 1781: Another Bubble Sort (冒泡排序&逆序对)

    Sample Input 3 9 8 7 5 1 9 2 6 4 3 1 2 3 4 5 6 7 8 9 9 8 7 5 1 9 2 6 4 3 1 2 5 4 3 6 7 8 9 9 8 7 5 1 ...

  10. hdu1227 dp

    题意:在一条路上有 n 个站点,并给定了每个站点的坐标,然后想要在 k 个站点旁边分别各建一个补给站,求所有站点到最近的补给站的距离和的最小值. 是的,毫无疑问,显然是 DP 问题,但是这题怎么递推还 ...