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

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

    您的支持,是我前进的动力

    第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

  • 相关阅读:
    决定迁移过来,深耕于此。。。
    一篇搞定MongoDB
    一篇搞定vue请求和跨域
    自定义全局组件
    一篇搞定vue-router
    一篇搞定Vuex
    vue系列
    .Vue.js大全
    一篇搞定spring Jpa操作数据库
    自定义admin
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/5712386.html
Copyright © 2011-2022 走看看