allWebPlugin中间件技术白皮书

allWebPlugin中间件技术白皮书

码农世界 2024-05-23 前端 151 次浏览 0个评论

目录

开发背景

软件功能

软件特点

运行环境

浏览器插件集成步骤

allWebPlugin与浏览器、插件关系图

引入相关allWebPlugin JS

添加页面元素

创建插件容器及插件

插件javascript封装类接口调用

插件事件响应

接口说明

PluginHostCnt接口

方法

createContainer方法

createPlugin方法

get_pcid方法

RegisterEvent方法

NObject 接口

方法

constructor方法

InvokeObject方法

get_pcid方法

get_obj方法

咨询交流


  • 开发背景

            用户信息化系统往往会存在浏览器使用ActiveX或NPAPI插件,解决复杂技术和业务问题。但由于浏览器不断升级,推出各种限制,造成浏览器无法支持ActiveX插件,也无法支持新标准的NPAPI插件,因此用户系统也无法正常运行,只能让用户保持指定版本的浏览器来使用,造成用户工作不便,经常切换不同浏览器,维护成本大。针对此问题,我们使用全新技术,开发全新allWebPlugin产品解决。

    • 软件功能

              allWebPlugin中间件是一款为用户提供安全、可靠、易用的浏览器插件的中间件产品。将第三方(标准协议ActiveX)插件直接嵌入H5浏览器,实现插件加载、接口调用、事件回调等中间件产品,产品拥有自主知识产权。产品具有支持多浏览器、多操作系统、ActiveX、NPAPI标准协议控件的特点,并且调用接口友好、集成方便,为用户提供“信息化系统 + allWebPlugin + 插件 + 多浏览器”的解决方案。

      • 软件特点

        1)支持任何版本的H5浏览器,包括最新谷歌内核版本浏览器,如:谷歌、火狐、Edge、360、搜狗、微信内置浏览器等。

        2)一次集成,所有浏览器都能运行,插件接口和事件调用脚本风格简单易懂,保持IE及谷歌浏览器脚本调用风格。

        3)插件直接在浏览器中运行,不是单独应用程序或窗体。与页面无缝衔接,支持任意比例缩放、支持多标签加载。

        4)插件方案相比H5“云架构”方案性价比更高,更易扩展,改造量小。

        5)面向对象开发接口设计,更易调用。

        • 运行环境

          客户机

          操作系统:WIN7、WIN8、WIN10、WIN11

          最低配置:CPU P4 2.8G,内存4G,硬盘500G。

          推荐配置:Intel i3及以上处理器,内存8G以上,SSD硬盘 128G以上。

          • 浏览器插件集成步骤

          • allWebPlugin与浏览器、插件关系图

                业务系统调用PluginHostCnt创建allWebPlugin中间件,allWebPlugin中间件会嵌入浏览器页面,并在内部容器中创建客户ActiveX或NPAPI 插件,根据插件标识实例化JS封装类对象,实现插件无缝嵌入浏览器及插件接口的调用。

            Javascript封装插件接口

            使用javascript脚本对浏览器插件导出类的方法和属性进行封装,方便后续网页调用插件接口。例如:针对axvlc插件,首先新建一个allWebVLC.js文件,根据插件VLCPlugin2类,新建javascript的allWebVLCPlugin2(派生自NObject)类,并用javascript脚本封装插件VLCPlugin2类方法和属性。(如下图所示)

            axvlc插件 VLCPlugin2 类

            Javascript allWebVLCPlugin2类

            • 引入相关allWebPlugin JS

                   为了页面加载插件,需要引入allWebPlugin.Common.js allWebPlugin.UI.js及插件封装js文件。例如,axvlc插件,需要引入allWebVLC.js插件封装js文件。如下图所示:

              添加页面元素

                    在需要展示插件的位置添加canvas页面元素。如下图所示:

                 

                      

              Sorry, It looks as though your browser does not support the canvas tag.

                      

              创建插件容器及插件

                       首先,实例化PluginHostCnt类,使用CreateContainer方法创建插件容器子窗口,然后使用createPlugin接口创建插件,并实例化allWebVLCPlugin2类。

              插件javascript封装类接口调用

              插件对象创建成功之后,实例化插件javascript封装类对象。可以像传统插件接口调用一样,调用插件javascript封装类对象的方法和属性。如下图所示:

              插件事件响应

                       为了响应插件事件,需要在插件创建时,注册待响应的插件事件,实现插件响应函数。如下图所示:

              • 接口说明

              • PluginHostCnt接口

                         创建插件之前,必须先创建插件容器程序;不同插件类型,使用不同插件容器程序。ActiveX插件使用PluginContainer 插件表示;NPAPI 插件使用 NPluginContainer(预留,NPAPI插件支持正在夜以继日开发中)。

                • 方法

                • createContainer方法

                  功能说明:创建插件容器。

                  参数说明:

                      canvas: 网页canvas画布元素

                     progID:  字符串  插件容器标识

                     license: 字符串  授权信息

                  返回值:

                  类型:布尔

                  当返回值为true时表示成功,其它表示失败。

                  示例

                  if(hostCnt.createContainer(canvas,"PluginContainer",license) == true){

                           hostCnt.RegisterEvent("OnCreated;OnCommand;OnRibbonCtrlCommand");

                           CreatePlugin();

                  }

                  • createPlugin方法

                    功能说明:创建插件。

                    参数说明:

                        clsid: 字符串 插件ID (ActiveX classID)。

                    返回值:

                    类型:布尔

                    当返回值为true时表示成功,其它表示失败。

                    示例

                    var varResponse = hostCnt.createPlugin("{6888ECA8-57D0-6E0E-9B9B-F1FF9B2DBD86}");

                    if(varResponse != null){

                        pluginObj = new allWebPluginOffice(varResponse.pcid,varResponse.ret.v,varResponse.ret.t);

                    }

                    • get_pcid方法

                      功能说明:获取插件容器ID。

                      参数说明:无

                      返回值:

                      类型:字符串

                      返回当前插件容器ID,每个插件拥有唯一的ID。

                      示例

                      var varResponse = hostCnt.createPlugin("{6888ECA8-57D0-6E0E-9B9B-F1FF9B2DBD86}");

                      if(varResponse != null){

                          pluginObj = new allWebPluginOffice(varResponse.pcid,varResponse.ret.v,varResponse.ret.t);

                      }

                      • RegisterEvent方法

                        功能说明:注册 createPlugin 插件的响应事件,事件之间通过";"隔开。

                        参数说明:无

                        返回值:无

                        示例

                        hostCnt.RegisterEvent("OnCreated;OnCommand;OnRibbonCtrlCommand");

                        • NObject 接口

                          所有插件可操作类都派生自NObject类。

                          • 方法

                          • constructor方法

                            功能说明:构建NObject对象。

                            参数说明:

                                pcid:字符串 插件容器ID

                               obj:  字符串  插件对象标识

                            返回值:无

                            • InvokeObject方法

                              功能说明:调用插件对象方法或属性。

                              参数说明:不定长参数

                                  fun:    字符串  插件对象方法名

                              params:  不定长参数  方法的参数

                              返回值:

                                       类型:可变类型。

                                       返回接口结果

                              示例

                                  get audio() {

                                       var resp = this.InvokeObject("get_audio");

                                      var ret;

                                       if(resp === undefined)

                                       {

                                           return ret;

                                       }

                                       ret = new audio(this.pcid,resp.v);

                                       return ret;

                                  }

                              • get_pcid方法

                                功能说明:获取当前插件容器标识。

                                参数说明:无

                                返回值:

                                         类型:字符串。

                                         返回插件容器标识

                                示例

                                ret = ActiveDocument.InvokeObject("Range",0,0);

                                if(ret === null)

                                {

                                    return;

                                }

                                var myRange = new NObject(pluginObj.get_pcid(),ret.v);

                                • get_obj方法

                                  功能说明:获取当前对象标识。

                                  参数说明:无

                                  返回值:

                                           类型:整形。

                                           返回当前对象

                                  咨询交流

                                  欢迎大家咨询交流,微信:yunkaipx(常用)   QQ 78418227(很少用)

                                  allWebPlugin中间件下载地址

                                  链接:https://pan.baidu.com/s/1AZbVbIDbbfsUq_q7F4E32w

                                  提取码:aihz

转载请注明来自码农世界,本文标题:《allWebPlugin中间件技术白皮书》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,151人围观)参与讨论

还没有评论,来说两句吧...

Top