.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. request应用实例

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  2. iOS UIlabel怎么加载html字符串 富文本的用法

    要加载html字符串,用人说,直接用webView啊!但是,有时候我们只需要显示2行文字,如此少的内容却要在复杂的UI排版中加入一个占用资源较多的webview,得不偿失.这里要说的是,我们其实可以用 ...

  3. jQuery之阻止默认事件以及解除阻止

    大家都知道e.preventDefault()可以阻止默认时间,例如提交功能,但是怎么解除呢?以下参考于网络: 可以使用removeEventListener来移除.但是条件是addEventList ...

  4. cocos2d-x移植:xcode到eclipse

    xcode程序移植到eclipse 必要组件: 1.macos gcc编译器,若没有,在xcode->preference->downloads中下载command line tools( ...

  5. Redis学习第二课:Redis String类型及操作

    Strings类型 String是最简单的类型,一个Key对应一个Value,String类型是二进制安全的,可以包含任何数据,比如jpg图片或序列化的对象. Strings类型的操作: Set:设置 ...

  6. 一起来点React Native——常用组件之Image

    一.前言 在开发中还有一个非常重要的组件Image,通过这个组件可以展示各种各样的图片,而且在React Native中该组件可以通过多种方式加载图片资源. 二.Image组件的基本用法 2.1 从当 ...

  7. Apache2.4配置总结(转)

    文章内容转自- ->https://blog.csdn.net/u012291157/article/details/46492137 1.apache开机自启动 [root@csr ~]# c ...

  8. 手机连不上eclipse

    在进行android开发时,有时候会很奇怪,手机连不上eclipse了,打开eclipse的ddms也没有,重启adb也不行,这时候我们应该怎么办呢. 首先打开资源管理器,找到 adb.exe 结束掉 ...

  9. 如何在magento添加推荐分类

    Magento Featured Category推荐分类模块安装 1.下载Magento Featured Categories Extension,下载地址:http://www.storefro ...

  10. Unity3D-实现连续点击两次返回键退出游戏(安卓/IOS)

    Unity3D-连续点击两次返回键退出游戏 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Count ...