【整理总结】代码沉淀 - CefSharp - 比较流行的第三方内嵌浏览器组件
.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 - 比较流行的第三方内嵌浏览器组件的更多相关文章
- 【整理总结】代码沉淀 - Caliburn.Micro - MV*模式短小精悍的框架
Caliburn.Micro - Xaml made easy. web: https://github.com/Caliburn-Micro/Caliburn.Microdocument: http ...
- 【代码沉淀】 - EPPlus - 操作xlsx表格文件
EPPlus - Create advanced Excel spreadsheets on the server.web: http://epplus.codeplex.com/nuget: Ins ...
- 转-使用 CefSharp 在 C# App 中嵌入 Chrome 浏览器
使用 CefSharp 在 C# App 中嵌入 Chrome 浏览器 2016-09-23 分类:.NET开发.编程开发.首页精华0人评论 分享到:更多3 本文由码农网 – 小峰原创翻译,转载 ...
- C#程序员整理的Unity 3D笔记(十三):Unity 3D基于组件的思想
如果你接触过<设计模式>.软件架构的编程思想,就会知道优秀的设计准则:“组合优于继承的”. 这句话很简短,但开始学习OOP的时候,真切的是—-不太好理解(以我个人当初学习为例). OOP的 ...
- WPF内嵌代码和后台代码简单混合使用
下面实例展示了WPF内嵌代码和后台代码混合使用,一个简单基础的实例: xaml文件: <Window x:Class="WPF内嵌代码和后台代码混合使用.MainWindow" ...
- 原生js实现tab选项卡里内嵌图片滚动特效代码
<!DOCTYPE HTML><html lang="en-US"><head><meta charset="UTF-8&quo ...
- 修复CefSharp浏览器组件中文输入Bug
概述 最近在win10上开发wpf应用,需要将CefSharp中wpf版本的浏览器组件(版本号v51.0.0)嵌入到应用中,但是发现不支持中文输入,GitHub上有这个问题的描述,参照其提到的方法可以 ...
- boost学习 内嵌类型检测 与 any 的代码练习
本文是学习 boost源码的一些练习 参考文章来自 刘未鹏 C++的罗浮宫(http://blog.csdn.net/pongba) 目录 http://blog.csdn.net/pongba/ar ...
- 使用Themeleaf时, HTML内嵌的JS代码需要注意< 和 >的问题
如果你使用了Themeleaf, 你的HTML文件又使用了内嵌的JS代码,那么一定要注意 你的JS代码必须用这样用: <script> /*<![CDATA[*/ var a = 6 ...
随机推荐
- 【笔记】《深入浅出MFC》第5章 总观Application Framework
凝聚性强.组织化强的类库就是Application Framework.一组合作无间的对象,彼此藉消息的流动而沟通,并且互相调用对方的函数以求完成任务,这就是Application Framework ...
- LibSVM文件转换为csv格式
Spark MLlib 的官方例子里面提供的数据大部分是 libsvm 格式的.这其实是一种非常蛋疼的文件格式,和常见的二维表格形式相去甚远,下图是里面的一个例子: libsvm 文件的基本格式如下: ...
- avalonJS-源码阅读(2)
上一篇文章讲述的avalon刷页面所用到的几个函数. 这篇则是主要讲avalon 对刷DOM刷出来的avalon自定义属性如何处理的. 目录[-] avalon页面处理(2)数据结构解析avalon标 ...
- memmove 对同一个指针不操作
memmove 对同一个指针不操作,所以调用memmove之前不用比较两个指针是否相同 void CTestDLLDlg::OnBnClickedButton6() { ; char* data = ...
- opencv-python教程学习系列11-几何变换
前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍几何变换,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系统: ...
- HDU - 2475:Box(splay维护森林)
There are N boxes on the ground, which are labeled by numbers from 1 to N. The boxes are magical, th ...
- arduino 配置 esp8266
在连接之前,先把程序下载到arduino中,很简单,就是定义了软口.如果中间要改动程序,要把rx和tx的连线去掉,不然下载程序可能失败. ; ; void setup() { pinMode(rx,I ...
- vue-meta
vue-meta插件的使用: https://github.com/declandewet/vue-meta
- (精)AVL树旋转共8种情况(涵盖所有考研的范围)
- ubuntu安装sublime教程
1.安装Sublime Text 3 及常用的神器插件 ①首先添加sublime text 3的仓库:sudo add-apt-repository ppa:webupd8team/sublime-t ...