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

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

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

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

    本文转自“吾乐吧软件站”,原文链接:http://www.wuleba.com/?p=23624

    感兴趣的,可以加入:WebKit/Blink 内核浏览器开发 QQ交流群:244840771

    开发语言为:.NET/C++ 方向

    4、第四种方法,自动注册JS脚本+自动反射方法分析

    4.1 实现过程:

    (1)、定义一个DemoRenderProcessHandler,继承自CefRenderProcessHandler

    (2)、重写DemoRenderProcessHandler里的OnWebKitInitialized ( )事件

    (3)、定义一个BindingHandler,继承自CefV8Handler

    (4)、定义一个普通的类ExampleObject(这个类跟ExampleBv8Handler一样,只是不再需要继承CefV8Handle)

    (5)、在BindingHandler里的Execute ( )事件中,通过反射,自动选择最合适的方法,进行调用,不再需要人工去写,几乎实现全自动

    (6)、在OnWebKitInitialized ( )事件里面,调用自己封装的类库,直接访问CefRuntimeEx.RegisterJsObjectEx ( )方法就可以自动注册,并且自动响应操作。

    (7)、写一个网页,去前台通过JS调用

    4.2 核心代码:

    这个方法,结合了方法一、方法二、方法三,采用反射自动生成所有的JS脚本注册,然后通过反射自动选择最合适的操作方法调用,为了减小文章篇幅,仅列出部分代码。

    /// <summary>

    /// DemoRenderProcessHandler.cs

    /// </summary>

    protected override void OnWebKitInitialized()

    {

        #region 历史操作

        //使用方法二

        CefRuntimeEx.RegisterJsObjectEx(“exampleObject”, new ExampleObject());

        #endregion 历史操作

        base.OnWebKitInitialized();

    }

    由于这部分代码较多,实现过程较复杂,所以阐述下具体的实现流程,代码就不贴出来了,感兴趣的可以加入QQ群一起讨论!流程如下:

    (1)、新建了一个BindingHandler.cs,这是整个封装的核心代码,继承自CefV8Handler

    (2)、通过反射,找到对应的对象,并提取他的所有属性、方法

    (3)、难点在于C#数据类型、Javascript数据类型、CefV8Value数据类型,三者之间的数据转换

    (4)、调用自己写的CreateJavascriptFull ( ),获得该对象完整的JS脚本代码

    (5)、完整JS代码包括:Header、Property、Method、Footer四个部分组成

    (6)、拿到JS代码之后,通过CefRuntimeEx.RegisterExtensionEx ( )进行注册

    (8)、当网页的JS访问后台数据时,在BindingHandler里的Execute ( )事件中,通过反射,自动选择最合适的方法,进行调用。

    4.3 评价总结:

    优势:

    (1)、自动注册JS脚本

    (2)、自动反射调用方法

    (3)、彻底解决方法一、方法二、方法三残留的弊端问题

    弊端:

    (1)、无法判断方法来源,不知道是哪个对象调用的;如果同时注册的类,含有同名方法,就会全部被响应。

    (2)、由于C#、Javascript、CefV8Value,三者之间的数据类型存在较大跨度,会导致部分数据类型不工作,所以如果遇到特殊数据,尽可能使用string来操作。

    from:http://www.wuleba.com/23624.html

  • 相关阅读:
    51,智联,猎聘,boss 15
    ubuntu重命名[桌面]为[desktop]
    13周让你爱上跑步-计划表
    Typecho的安装 --【Typecho01】.md
    ubuntu跑vue报错:#Error from chokidar # Error: ENOSPC: System limit for number of file watchers reached
    Java中多线程编程--synchronized关键字
    Java中几种常见的设计模式--代理设计模式
    Metaspolit下UAC提权以及日志清除
    JVM初探(五):类的实例化
    JVM初探(四):类加载器
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/5712389.html
Copyright © 2011-2022 走看看