作者: 牛A与牛C之间 时间: 2013-11-19 分类: 技术文章 | 暂无评论 | 编辑文章

主页 » 技术文章 » 第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脚本+委托回调方法分析的更多相关文章

  1. 【转】第7篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:全自动注册与反射方法分析

    作者: 牛A与牛C之间 时间: 2013-12-12 分类: 技术文章 | 2条评论 | 编辑文章 主页 » 技术文章 » 第7篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  2. 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析

    作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  3. 【转】第4篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:委托回调方法分析

    作者: 牛A与牛C之间 时间: 2013-11-18 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第4篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  4. 【转】3篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:官方原生方法分析

    作者: 牛A与牛C之间 时间: 2013-11-17 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第3篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  5. Xilium.CefGlue怎么使用Js调用C#方法

    第1篇:.NET多种WebKit内核/Blink内核浏览器初步测评报告http://www.wuleba.com/?p=23590 第2篇:Xilium CefGlue 关于 CLR Object 与 ...

  6. xilium CefGlue集成包

    最近很苦B的要做一个C#的HTM5项目,build了一下xilium CefGlue包,提供下载地址,供那些无法下载的同学们使用. http://yun.baidu.com/s/1slEdNEt

  7. Xilium.CefGlue利用XHR实现Js调用c#方法

    防外链 博客园原文地址在这里http://www.cnblogs.com/shen6041/p/3442499.html 引 Xilium CefGlue是个不错的cef扩展工程,托管地址在这里 ht ...

  8. CEF Xilium.CefGlue 在当前窗体中打开全部链接(防止弹窗)

    我们在使用Xilium.CefGlue编写浏览器应用程序时.对于嵌入的网页假设有链接会在新窗体打开.这种用户体验会非常差.因此我们须要改动程序,使全部链接都在当前窗体中打开. 首先引用Xilium.C ...

  9. SpringMVC4+thymeleaf3的一个简单实例(篇五:页面和MySql的数据交互-展示以及存储)

    这一篇将介绍怎样把页面数据保存的MySQL数据库,并将数据库内容展示到页面上.首先做一个基础工作,添加以下jar到lib:1: mysql-connector-Java-5.1.40-bin.jar ...

随机推荐

  1. Kylin上chromium不能用flash的解决命令

    sudo apt-get update sudo apt-get install pepperflashplugin-nonfree sudo update-pepperflashplugin-non ...

  2. iOS常用正则表达式验证(手机号、密码格式、身份证号等)

    #import @interfaceUtils : NSObject #pragma 正则匹配手机号 + (BOOL)checkTelNumber:(NSString*) telNumber; #pr ...

  3. turn.js实现翻书效果

    JS插件网 http://www.ijquery.cn/?p=173 描述:Turn.js 是一个轻量级的 (15kb) jQuery/html5 插件用来创建类似书本和杂志翻页效果,支持触摸屏设备. ...

  4. oracle疑难杂症问题

    在虚拟机中安装了oracle10g,由于虚拟机的空间有限,看到磁盘空间快没了,就手贱把oracle目录中的空文件夹(E:\oracle\product\10.2.0\flash_recovery_ar ...

  5. Ubuntu安装Sun JDK及如何设置默认java JDK

    假设系统为Ubuntu 10.10 64位.    先来看看当前的系统默认的java版本,及提供商.通过命令java -version       kemix@kemix-VB10-64:~$ jav ...

  6. toLocaleString

  7. 三分钟了解Activity工作流

    一. 什么是工作流 以请假为例,现在大多数公司的请假流程是这样的 员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑 采用工作 ...

  8. 2014年IT互联网行业薪酬待遇

    以下均为应届毕业生的起薪待遇: 一.民企 1. 百度 13k*14.6,special 14~17k*14.6 开发类 13K*14.6 (2014) 测试类.前端类 12K*14.6 (2014) ...

  9. SAP系统联机应用程序帮助

    新安装好的SAP系统,联机帮助是不能用的. 通过菜单中的“帮助-应用程序帮助” 和“帮助-SAP库”都打不开任何帮助页面.这并不是因为SAPgui安装不完整,而是因为SAP的帮助系统本身就不包含在GU ...

  10. JavaWeb学习记录(六)——用户登录功能之Cookie

    private Cookie nameCookie=null;    private Cookie passCookie=null;    private Cookie cookieUser;     ...