基于.net开发chrome核心浏览器【七】

这是一个系列的文章,前面六篇文章的地址如下:

基于.net开发chrome核心浏览器【六】

基于.net开发chrome核心浏览器【五】

基于.net开发chrome核心浏览器【四】

基于.net开发chrome核心浏览器【三】

基于.net开发chrome核心浏览器【二】

基于.net开发chrome核心浏览器【一】

这篇文章和前面六篇文章关系不大,你如果懒得看前面六篇的话,从这一篇开始看也没问题

之前写的六篇文章,都是基于 Xilium.CefGlue开源项目的,

后来又接触过 CefSharp(据说github的客户端也是用这个开发的,但用起来感觉有点蛋疼)

随后又用过 chromiumfx,这个项目虽然用的人没有CefShrp多,但用起来真的很舒心

有时间的话,我再做一下这三个项目的横向对比。

上面三个项目都是基于 CEF的,说实在的 CEF这个项目带有强烈的种族歧视色彩

早在2011年的时候就有国人提到 输入法提示框不能跟随输入光标的问题,

并给出了解决方案,请求合并到主干上,但这个项目的负责人,并没有持续跟进这个问题

直到上周一才解决掉这个问题,这期间不知道有多少中、日、韩的开发者在这个问题上纠结

我只能狠狠的说一句“我去年买了个表的!”(当然这是开玩笑的话,我还是尊重开源界所付出的心血和汗水的)

目前CefSharp、CefGlue、chromiumfx都还没有更新,这个问题在这三个项目上依然存在。

另外不得不说一下 nw.js,这是一个国内牛人做的开源项目,我关注了很久了!

nodejs+chromium核心并且还共用V8引擎,对chromium封装的非常好,你几乎挑不出任何毛病

想 用nw.js开发一个浏览器也不是不可能,但一定要用nodejs就有点蛋疼了,

我曾经给作者 Roger Wang发过邮件,哀求他做一个go语言或C#的封装,

邮件如泥牛入海,再无回音,不过话又说回来人,家是牛人,你又能咋滴!

我们这次要说的是基于chromiumfx开源项目做浏览器应用,言归正传!

环境部署

首先你的 下载chromiumfx的类库,注意,你要记下他的版本号,比如目前最新的版本号是:3.2171.13

其次你要 下载CEF的类库,注意,这里下载的版本号要和前面记下的版本号前两个数字一致,这里就是:3.2171.2069

创建一个winform的工程,运行一下,并在debug目录下创建一个cef的目录:“bin\Debug\cef”

然后把你下载的CEF压缩包解压缩,把release子目录下的东西,都拷贝到 bin\Debug\cef

然后把Resources子目录下的东西也拷贝到 bin\Debug\cef

然后解压缩chromiumfx压缩包,把名称以libcfx开头的文件拷贝到bin\Debug\cef目录

最后这个目录下大概应该有这些内容:

然后让你的工程引用ChromiumWebBrowser.dll和ChromiumFX.dll, 并让这两个DLL拷贝到本地

然后设置你的程序集的属性

“生成”的“目标平台”是x86

“调试”的时候,不能“启用VisualStudio承载进程”

启动和终止Chromium的运行时

先来看代码

Initialize的时候,程序会去你的执行路径下找cef子目录,并加载相关的类库

Shutdown的时候,程序会回收掉 Chromium运行时占用的一些资源;

你也可以通过这种方式来设置一个具体的路径

CfxRuntime.LibCefDirPath = @"C:\path\to\cef\directory"; ChromiumWebBrowser.Initialize();

使用浏览器控件并把他显示在窗体上

就这么三行代码,很简单吧

让浏览页面里的iframe执行JS脚本

先看代码:

var f = wb.GetFrame("mem_index"); var js = File.ReadAllText("login.js", Encoding.UTF8); f.ExecuteJavaScript(js, "", 0);

第一行代码 用webbrowser控件获取一个iframe有好几个重载方法 我这里输入的是iframe的name, 还有CfxFrame GetFrame(long identifier);注意这里可不是iframe的id哦 还有一个函数挺有用的 List<string> GetFrameNames(); 得到页面中所有iframe的名字

第二行代码就不用解释了 你看到我写了login.js应该知道我不是在做什么好事儿

第三行代码就是让这个iframe执行这段JS脚本 方法的签名是这样的: void ExecuteJavaScript(string code, string scriptUrl, int startLine); 如果你的iframe已经加载了jquery,那么你执行的代码也是可以使用jqeury的 第二个参数和第三个参数都是和出错调试有关的

浏览器加载状态变更事件

wb.OnLoadingStateChange += wb_OnLoadingStateChange; void wb_OnLoadingStateChange(object sender, Chromium.Event.CfxOnLoadingStateChangeEventArgs e) {             if (e.IsLoading == false)             {                  //do what you want             } }

加载完成的时候e.IsLoading的值是false

后记

就写到这里,以后再写本系列的第八篇

第八篇的内容将包含:

接管js对话框,并自动触发是或否的按钮 JS和C#通信 给页面或iframe注册全局的回调函数 接管或屏蔽页面的请求

喜欢的人请点推荐,分享知识也不容易,大家快来感谢我

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

使用ThinkPHP框架快速开发网站(多图)

http://blog.csdn.net/ruby97/article/details/7574851/

1.9K2
来自专栏FreeBuf

旧饭新炒之Intel AMT提权漏洞(CVE-2017-5689)后续利用

之前的一篇Intel产品AMT本地及远程提权漏洞(CVE-2017-5689)复现,只是简单的复现了该漏洞,在文章最后提及到了如果进一步对该漏洞进行利用。但是有...

2466
来自专栏FreeBuf

微软对外披露两个0day漏洞详情

微软近日对外披露了两个0day漏洞详情,其中一个漏洞存在Adobe阅读器中,可被利用导致任意代码执行;另一个漏洞则允许任意代码在Windows kernel内存...

671
来自专栏FreeBuf

软件漏洞分析技巧分享

作者:riusksk【TSRC】 在日常分析软件漏洞时,经常需要耗费比较长的分析时间,少则几小时,多则数天,甚至更久。因此,经常总结一些分析技巧是非常有必要的,...

2469
来自专栏社区的朋友们

爬虫实战 : 爬虫之 web 自动化终极杀手(下)

最近写了好几个简单的爬虫,踩了好几个深坑,在这里总结一下,给大家在编写爬虫时候能给点思路。本次爬虫内容有:静态页面的爬取。动态页面的爬取。web 自动化终极爬虫...

1.6K1
来自专栏Flutter入门到实战

开发工具总结(8)之图文并茂全面总结上百个AS好用的插件(下)

上篇文章介绍了一至七条,由于篇幅过长,这里分为上下两篇讲解,这里截取的是剩下的从第八条开始一直到结尾的那一部分。查看上篇文章请点击 开发工具总结(1)之图文并茂...

1513
来自专栏python小白到大牛

学习Python一个星期用Scrapy爬取天气预报实践一番

写一个真正意义上一个爬虫,并将他爬取到的数据分别保存到txt、json、已经存在的mysql数据库中。

1662
来自专栏恰同学骚年

NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例

  “消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。消息被发送到队列中,“消息队列”是在消息的传...

1442
来自专栏ChaMd5安全团队

第二届强网杯 web方向部分writeup

Web签到 题目信息: Flag: QWB{s1gns1gns1gnaftermd5} 提示: http://39.107.33.96:10000 查看源码发现...

3537
来自专栏LinXunFeng的专栏

iOS - 给高仿微信添加直播聊天功能

2053

扫码关注云+社区

领取腾讯云代金券