作者: 牛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. 【LEETCODE OJ】Reorder List

    Problem link: http://oj.leetcode.com/problems/reorder-list/ I think this problem should be a difficu ...

  2. Could not launch "app_name"

    真机测试 不报错 编译通过后 Xcode总出这个错 process launch faild:NotFound-------解决办法 :重启设备

  3. GIT之二 基础篇(1)

    GIT基础 取得项目的 Git 仓库 有两种取得 Git 项目仓库的方法.第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库.第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来. 在 ...

  4. asp.net页面间传值的几种方法

    表单提交 传送页面代码 <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server ...

  5. 怎么在手机浏览器上访问电脑本地的文件,局域网内,自建WiFi也可以

    首先,电脑要有Mysql+Apache+PHP环境,我直接用Wampsever,开启环境后手机和电脑要再同一个局域网内,然后电脑上打开win+R,输入cmd,再输入ipconfig,就可以看着这台的电 ...

  6. Android Listener 监听的几种写法

    Android中,View的Listener方法,在是否使用匿名类匿名对象时,有各种不同的写法. OnClickListener和其他Listener方法一样,都是View类的接口,重载实现后就能使用 ...

  7. I.MX6 32G SD卡测试

    /*********************************************************************** * I.MX6 32G SD卡测试 * 说明: * 这 ...

  8. Core Java Volume I — 3.3. Data Types

    3.3. Data TypesJava is a strongly typed language(强类型语音). This means that every variable must have a ...

  9. Windows上的文件合并命令

    从Linux转到Windowns后,发现很多好用的shell命令都没有了,但实际情况是Windows一样有DOS时代的命令窗口,在CLI年代用DOS的人也要干活. 比如,今天想将几个单独的sql文件整 ...

  10. HDU 1392 凸包

    Surround the Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...