时间:2016-01-26 22:52 来源: 我爱IT技术网 作者:佚名
本文所分享的知识点是【基于.net开发chrome核心浏览器【七】】,欢迎您喜欢52ij所分享的新闻、攻略、电脑教程及手机知识等经验,下面是详细的讲解。
基于.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核心浏览器【七】的相关讨论如下:
相关问题:请问这代码怎么支持Chrome核心浏览器
答:给你参考,支持chrome,firefox,ie >>详细
相关问题:浏览器核心是不是大体可分为 ie核心(目前国内大多...
答:您好!很高兴为您答疑! 几款主流浏览器实际使用中,性能差异几乎可以忽略不计,您可以根据自己的喜好和操作习惯选择浏览器使用,火狐的优势在于使用Gecko内核,是一款开源、安全的浏览器,拥有非常强大的扩展功能,可以根据自己的需求定制浏览... >>详细
相关问题:chrome核心的浏览器,哪个速度最快?
答:都是一样的内核,基于他改的,CHROME方面是一样的。只是多了一些零碎功能更适合用户和习惯,加了IE的内核,方便切换。现在切换基本上无缝了。我肯定用chromeplus之类的,毕竟方便。还保持着CHROME的味道其实对于同一个版本是一样的。而且修改版... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
