【转】第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 ...
随机推荐
- Planning for a period of time
After a period of struggle , i decided to follow the teacher Chen learning . Say true i really disli ...
- OD调试4--绕过nag窗口
先看一下程序的运行情况 先跳出了一个nag窗口 点确定 又跳出了一个NAG窗口,这是一些程序编写的时候常用的方法,设法让你购买正版软件, 于是今天呢,学会了四种绕过NAG的方法 我们先用OD加载进入这 ...
- Cisco ASA 高级配置
Cisco ASA 高级配置 一.防范IP分片攻击 1.Ip分片的原理: 2.Ip分片的安全问题: 3.防范Ip分片. 这三个问题在之前已经详细介绍过了,在此就不多介绍了.详细介绍请查看上一篇文章:I ...
- Windows系统定时重开或者关机
at 6:00 /every:M,T,W,Th,F,S,Su cmd /c shutdown -r -t 60 (每天早上6点自动重启一次) at 0:00 /every:M,T,W,Th,F,S,S ...
- java作业5
(一)用你的大数类实现加和减两个功能(乘除阶乘未实现) import java.util.Scanner; import java.io.IOException; import java.io.Inp ...
- PHP访问REST API上传文件的解决方案
最近写的一个小功能需要通过rest方式上传文件,因此就在网上找了一些解决方案.接下来说明以下我采用的解决方案:我是利用curl来实现的,其中CURLOPT_POST的值为TRUE代表的是请求类型为PO ...
- mysql锁表机制及相关优化
(该文章为方便自己查阅,也希望对大家有所帮助,转载于互联网) 1. 锁机制 当前MySQL支持 ISAM, MyISAM, MEMORY (HEAP) 类型表的表级锁,BDB 表支持页级锁,InnoD ...
- 找不到请求的 .Net Framework Data Provider。可能没有安装.
学习中遇到的问题: 找不到请求的 .Net Framework Data Provider.可能没有安装. 找到的解决方法 解决方法: 安装Microsoft SQL Server Compact 4 ...
- nginx的启动,停止命令
停止操作停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文 章)来进行的步骤1:查询nginx主进程号ps -ef | grep nginx在进程列表里 面找master进程,它的编 ...
- 纯 CSS 创建一个三角形
[要求]:用纯CSS创建一个三角形的原理是什么? ♪ 答: 把上.左.右三条边隐藏掉(颜色设为 transparent) [实现]: #demo { width: 0; height: 0; bord ...