【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析

第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析
本文转自“吾乐吧软件站”,原文链接:http://www.wuleba.com/?p=23622
感兴趣的,可以加入:WebKit/Blink 内核浏览器开发 QQ交流群:244840771
开发语言为:.NET/C++ 方向
3、第三种方法,自动注册JS脚本+委托回调方法分析
3.1 实现过程:
(1)、定义一个DemoRenderProcessHandler,继承自CefRenderProcessHandler
(2)、重写DemoRenderProcessHandler里的OnWebKitInitialized ( )事件
(3)、定义一个BindingHandler,继承自CefV8Handler
(4)、定义一个普通的类ExampleObject(这个类跟ExampleBv8Handler一样,只是不再需要继承CefV8Handle)
(5)、在BindingHandler里的Execute ( )事件中,写你要执行的操作代码
(6)、在Execute ( )事件中,利用委托进行回调,把要操作的代码回调执行
(7)、在OnWebKitInitialized ( )事件里面new BindingHandler( ),调用自己封装的类库,全自动生成JS脚本代码,通过官方提供的RegisterExtension(string extensionName, string javascriptCode, CefV8Handler handler)方法进行注册
(8)、写一个网页,去前台通过JS调用
3.2 核心代码:
这个方法,结合了方法一、方法二,采用反射自动生成所有的JS脚本并注册,封装方法比较复杂,但是操作起来变得很方便。由于代码较多,为了减小文章篇幅,仅列出部分代码。
/// <summary>
/// DemoRenderProcessHandler.cs
/// </summary>
protected override void OnWebKitInitialized()
{
#region 历史操作
//使用方法一
var bindingHandler = new BindingHandler { CallBack = CallBackMethod };
var javascriptCode = CefRuntimeEx.GetJavascriptFull(“exampleObject”, new ExampleObject(), bindingHandler);
CefRuntime.RegisterExtension(“exampleObject” + “ExtensionName”, javascriptCode, bindingHandler);
#endregion 历史操作
base.OnWebKitInitialized();
}
由于这部分代码较多,实现过程较复杂,所以阐述下具体的实现流程,代码就不贴出来了,自己打开项目去看吧!流程如下:
(1)、新建了一个BindingHandler.cs,这是整个封装的核心代码,继承自CefV8Handler
(2)、通过反射,找到对应的对象,并提取他的所有属性、方法
(3)、难点在于C#数据类型、Javascript数据类型、CefV8Value数据类型,三者之间的数据转换
(4)、调用自己写的CreateJavascriptFull ( ),获得该对象完整的JS脚本代码
(5)、完整JS代码包括:Header、Property、Method、Footer四个部分组成
(6)、拿到JS代码之后,通过CefRuntime.RegisterExtension ( )进行注册
3.3 评价总结:
优势:
(1)、方法一、方法二,最大的弊端就是需要在后台注册JS代码,这个方法,彻底解决这个问题
(2)、由于结合了方法二优势,所以可以在调用的地方写操作代码,不需要在类内部写
弊端:
(1)、与方法一、方法二一样,存在不灵活的问题,因为大部分情况下,JS交互的目的是为了和C#后台实现数据绑定/共享,或者事件响应。虽然通过CallBackMethod ( )可以实现自己想要的操作,但如果仅仅是在CallBackMethod ( )里重复的调用对应的class方法,那也是不可取的。(因为方法已经存在了,所以CallBackMethod ( )一般也就是简单的调用class的方法)
from:http://www.wuleba.com/23622.html
【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析的更多相关文章
- 【转】第7篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:全自动注册与反射方法分析
作者: 牛A与牛C之间 时间: 2013-12-12 分类: 技术文章 | 2条评论 | 编辑文章 主页 » 技术文章 » 第7篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析
作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】第4篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:委托回调方法分析
作者: 牛A与牛C之间 时间: 2013-11-18 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第4篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】3篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:官方原生方法分析
作者: 牛A与牛C之间 时间: 2013-11-17 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第3篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- Xilium.CefGlue怎么使用Js调用C#方法
第1篇:.NET多种WebKit内核/Blink内核浏览器初步测评报告http://www.wuleba.com/?p=23590 第2篇:Xilium CefGlue 关于 CLR Object 与 ...
- xilium CefGlue集成包
最近很苦B的要做一个C#的HTM5项目,build了一下xilium CefGlue包,提供下载地址,供那些无法下载的同学们使用. http://yun.baidu.com/s/1slEdNEt
- Xilium.CefGlue利用XHR实现Js调用c#方法
防外链 博客园原文地址在这里http://www.cnblogs.com/shen6041/p/3442499.html 引 Xilium CefGlue是个不错的cef扩展工程,托管地址在这里 ht ...
- CEF Xilium.CefGlue 在当前窗体中打开全部链接(防止弹窗)
我们在使用Xilium.CefGlue编写浏览器应用程序时.对于嵌入的网页假设有链接会在新窗体打开.这种用户体验会非常差.因此我们须要改动程序,使全部链接都在当前窗体中打开. 首先引用Xilium.C ...
- SpringMVC4+thymeleaf3的一个简单实例(篇五:页面和MySql的数据交互-展示以及存储)
这一篇将介绍怎样把页面数据保存的MySQL数据库,并将数据库内容展示到页面上.首先做一个基础工作,添加以下jar到lib:1: mysql-connector-Java-5.1.40-bin.jar ...
随机推荐
- Making the Grade_滚动数组&&dp
Description A straight dirt road connects two fields on FJ's farm, but it changes elevation more tha ...
- Java最近版本新特性使用介绍
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 在阅读<Thinking in Java>的过程中,并发这一章出现不少新特性,工作中也有 ...
- magento关于站点搬家,换空间
1,先把原来空间的文件全部压缩后(有些不要的就不要压缩)下载下来,然后传到新空间去,注意下载下来后核对一下是否大小一样,建议使用ftp工具下载, 2,同样把原来空间的数据库打包下来,再在新空间创建一个 ...
- 多界面开发 、 导航控制器(NavigationController)
1 VC之间的跳转和正向传值 1.1 问题 在实际的开发中更多的应用都会有多个页面组成,每个页面展示不同的信息,页面之间的跳转是由视图控制器来实现的,本案例实现两个页面的之间的跳转和页面之间的正向传值 ...
- oracle疑难杂症问题
在虚拟机中安装了oracle10g,由于虚拟机的空间有限,看到磁盘空间快没了,就手贱把oracle目录中的空文件夹(E:\oracle\product\10.2.0\flash_recovery_ar ...
- H - 放苹果
Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status Des ...
- Dubbox监控在服务器中的安装
Jdk-1.6.30以上版本 Tomcat-7.0.42 Duboo-2.5.3 Zookeeper-3.4.5 端口分配 序 系统/端口 http https shutdown ajp 调度JMX ...
- Git简易的命令行入门教程
简易的命令行入门教程: Git 全局设置: git config --global user.name "imsoft" git config --global user.emai ...
- asp.net网站 提示Ambiguous match found
在ASP.net中,每个aspx页面都会有一个.cs文件,(好像不可以多个aspx共用一个cs的,我前面就碰到这个问题), 在aspx页面中,我们会用到服务器控件,或html控件,这些控件的id命名时 ...
- Log4J 使用实战
前言: 日志在开发和服务中扮演重要的角色, 有人用来追查/分析问题, 有人通过日志, 来记录重要的信息. 日志是数据分析和统计最重要的数据来源. 在Java领域, Log4j日志框架成为java开发人 ...