基于.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注册全局的回调函数
接管或屏蔽页面的请求
基于.net开发chrome核心浏览器相关推荐
- 基于.net开发chrome核心浏览器【五】
原文:基于.net开发chrome核心浏览器[五] 一:本篇将解决的问题 本章主要为了解决一下几个问题: 1.JsDialog的按钮错位的问题 我们开发出的浏览器,在有些操系统上调用alert,con ...
- 基于.net开发chrome核心浏览器【一】
基于.net开发chrome核心浏览器[一] 基于.net开发chrome核心浏览器[二] 基于.net开发chrome核心浏览器[三] 基于.net开发chrome核心浏览器[四] 基于.net开发 ...
- 基于.net开发chrome核心浏览器【四】
基于.net开发chrome核心浏览器[一] 基于.net开发chrome核心浏览器[二] 基于.net开发chrome核心浏览器[三] 基于.net开发chrome核心浏览器[四] 基于.net开发 ...
- 【转】C# 开发Chrome内核浏览器(WebKit.net)
WebKit.net是对WebKit的.Net封装,使用它.net程序可以非常方便的集成和使用webkit作为加载网页的容器.这里介绍一下怎么用它来显示一个网页这样的一个最简单的功能. 第一步: 下载 ...
- 黄聪:C# 开发Chrome内核浏览器(WebKit.net)
WebKit.net是对WebKit的.Net封装,使用它.net程序可以非常方便的集成和使用webkit作为加载网页的容器.这里介绍一下怎么用它来显示一个网页这样的一个最简单的功能. 第一步: 下载 ...
- 基于QWebView开发的浏览器通过需要证书认证网站的方法
本文由Markdown语法编辑器编辑完成. 1. 前言 现有一款基于QT开发的网络浏览器.已经可以访问一般的网站,如百度,新浪网站等等.但是,当基于该浏览器访问一些内部网站,如需要证书认证的医院HIS ...
- 我的第一个Chrome小插件-基于vue开发的flexbox布局CSS拷贝工具
概述 之前介绍过 移动Web开发基础-flex弹性布局(兼容写法) 里面有提到过想做一个Chrome插件,来生成flexbox布局的css代码直接拷贝出来用.最近把这个想法实现了,给大家分享下. pl ...
- mac 下基于firebreath 开发多浏览器支持的浏览器插件
mac 下基于firebreath 开发多浏览器支持的浏览器插件 首先要区分什么是浏览器扩展和浏览器插件;插件可以像本地程序一样做的更多 一. 关于 firebreath http://www.fir ...
- js ajax浏览器做什么,js区分webkit核心浏览器chrome,360浏览器
javascript如何识别webkit核心浏览器是哪种厂商的浏览器,如chrome,360急速,360安全,猎豹,世界之窗,搜狗,qq,百度之类的浏览器,核心都是webkit的,如何区分出不同的厂商 ...
- 一款基于Netty开发的WebSocket服务器
代码地址如下: http://www.demodashi.com/demo/13577.html 一款基于Netty开发的WebSocket服务器 这是一款基于Netty框架开发的服务端,通信协议为W ...
最新文章
- fwr171改无线服务器,迅捷(Fast)FWR171无线AP模式设置
- 关于毕业租房的一些碎碎念。
- MFC窗口颜色的设置
- 小米网关控制空调伴侣_小米有品上架移动空调,支持语音控制
- 我的第一次Pascal程序
- IE的@cc_on条件编译
- 洛谷.3065.第一!First!(Trie 拓扑)
- 6LoWPAN Header compression
- windows下sakai配置过程
- 浪曦 ASP.net AJAX系列 视频下载
- julia集 matlab代码,Julia集分形
- 三位量子信息科学家斩获2022年诺贝尔物理学奖【通俗解读】
- matlab补帧,超清还不够,插帧算法让视频顺滑如丝丨NeurIPS 2019
- 【源码】日历转换器:格里高利历、波斯历和伊斯兰历法
- [源码和文档分享]基于JAVA的葫芦娃救爷爷游戏
- 被墙了究竟是什么意思?
- 浅谈移动端页面性能优化方案
- python模块-----pyqrcode
- cboard企业版源码_CBoard自助BI数据分析产品 v0.4.2
- pod update --verbose --no-repo-update 和 pod install --verbose --no-repo-update的区别