先说为什么要自研呢
1、在一些商业软件中,可以统一浏览器,这样不用考虑浏览器的兼容性,开发成本小,甚至不需要专门的前端开发,容易维护。
2、JS调用CS浏览器功能,可以实现客户端打印等,解决一些系统打印的问题,OCX已经不再被支持,可以使用JS调用浏览器替代。
3、屏蔽右键和调试器,保护程序。
其他可以实现的,比如
接管js对话框,并自动触发是或否的按钮
JS和C#通信
给页面或iframe注册全局的回调函数
接管或屏蔽页面的请求
先说一下cef
Cef项目是C/C++的项目;
下面我们来看看Cef项目生成的一些dll和资源都是做什么用的
打开这个目录\cef_binary_3.1453.1236_windows_xilium\Release
libcef.dll-------------------------->Cef的核心类库
icudt.dll-------------------------->支持unicode的类库
ffmpegsumo.dll------------------>支持音频和视频的类库
d3dcompiler_43.dll--------------->WinXP下支持3D的类库
d3dcompiler_46.dll--------------->Win7和之后的Win支持3D的类库
libEGL.dll------------------------->用于支持3D
libGLESv2.dll--------------------->用于支持3D
打开目录:\cef_binary_3.1453.1236_windows_xilium\Resources
locales--------------------------->此文件夹存放了各种国家的语言资源
cef.pak-------------------------->为WebKit相关的资源(谷歌浏览器的核心是webkit)
devtools_resources.pak--------->调试器的相关资源(我们做的项目是可以使用谷歌浏览器的调试器的)
CEF有两个版本,CEF1和CEF3
CEF1是单进程的,实现了更多的特性,内存使用更少,与客户端应用更能完美的结合,使用的是WebKit的API,但是FLASH无法在这个框架中正常播放,不支持html5的音频和视频,只支持NPAPI插件。关于NPAPI插件的相关知识,请参阅这里:http://developer.chrome.com/extensions/npapi.html(好像要FQ)
CEF3是多进程的,使用异步消息的方式来完成主进程和其他进程的通信(其他进程有可能是Webkit,也有可能是V8的解析引擎进程),使用的是chromium官方的内容呈现API,支持NPAPI和PPAPI插件,有一个单独的进程用于调试,相对于CEF1来说,虽然可以播放FLASH等视频,但是还有很多问题没有处理掉,社区里的人认为CEF1更稳定一些,CEF3的issues列表,请参阅这里:https://code.google.com/p/chromiumembedded/issues/list
我们选用的是CEF3和Xilium.CefGlue,Xilium.CefGlue是对CEF项目的.net的包装,它是用P/Invoke的方式来调用CEF类库的,请参见:https://bitbucket.org/xilium/xilium.cefglue/wiki/Home
还有一个CEFSharp的项目,是用C++/CLI的方式来调用CEF类库的,请参见:https://github.com/chillitom/CefSharp
CefGlue是建立在Cef项目之上的,
CefGlue只不过是通过PInvoke来访问Cef项目生成的一些dll
实现有以下几种方式
CefSharp
优点:
WinForms是非常老和成熟的项目。如果你要使用WinForms它可能是去的方式;
它有一个NuGet bundle,所以它很容易使用和更新;
支持较新版本的WPF(.NET 4);
支持单声道。
缺点:
As @Uwe Keim提到他们刚才最近才开始支持WPF,所以它不像Xillium.CefGlue那么成熟;
社区不是那么接受你的需要。
CefGlue
优点:
这是.NET 2.0友好。你的代码将能够在它上面运行。 (这对我们至关重要)
一个非常敏感的社区,这将帮助你得到你需要做的/固定的;
更成熟的WPF支持;
缺点:
根据我所知,没有NuGet包,你需要添加库并自己更新它
NanUi
miniblink
在写这篇文章时,搜索到这一种实现方式。
官网
https://miniblink.net/index.html
优缺点看官方文档吧。
这个并不是开源免费的,标题版本可以免费使用,但不开源。高级版本收费。
使用说明
下载SDK表,将node.dll放在程序运行目录下。
总结
目前来看,miniblink开发应用更好一些。
1.没有过度页面,比较清爽。
2.前后台数据交换更方便一些。
没有深度使用,过一段深度使用后,再来告诉大家。