APP下载

浏览器客户端功能扩展实现方法研究

2020-10-20苏祖辉

名城绘 2020年6期
关键词:调用插件组件

摘要:本文主要针目前编写支持所有浏览器的客户端功能扩展组件的实现过于复杂,而提出的一种支持所有浏览器的客户端功能扩展组件的实现方法,针对现在缺陷,本文将给出一种通用的支持所有浏览器的客户端功能扩展组件的技术框架,不依赖于浏览器本身的插件技术,同时也可以无限扩展组件的功能,有效低降低Internet上发布跨浏览器插件的成本。

关键词:浏览器扩展;WEB应用

引言

在管理信息系统开发中,B/S(Browser/Server)结构即浏览器和服务器结构的模式越来越流行。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。B/S结构的优点:具有分布性特点,可以随时随地进行查询、浏览等业务处理,业务扩展简单方便,通过增加网页即可增加服务器功能,维护简单方便,只需要改变网页,即可实现所有用户的同步更新,开发简单,共享性强。

但B/S 模式也有一些缺点:各浏览器标准不一样,安全性高,网页在浏览器设置的“沙箱”内运行,功能有限制,难以实现传统模式下的特殊功能要求。

1 技术现状

目前主要的浏览器主要有:微软公司传统IE浏览器和WIN10新发布的EDGE新型浏览器、网景公司FireFox和Google Chrome浏览器,各浏览器实现的插件技术不一样,微软公司IE浏览器使用的是COM技术,也称ActiveX控件技术,用于实现IE浏览器功能的扩展,加上数字签名技术,在不修改IE安全级别的前提下,可实现功能的扩展,但WIN10新发布的EDGE浏览器已经不支持微软自己的ActiveX控件技术,网景公司FireFox以网景插件应用程序编程接口(NPAPI)技术实现控件扩展, Google Chrome 42以前的版本也支持NPAPI技术,但Chrome新版本已经不再支持NPAPI技术,转为使用PPAPI技术。

由于浏览器作为软件界面框架广泛应用,给用户带来方便,同时也带来了麻烦,发布支持所有浏览器的客户端扩展功能组件时需要考虑各类浏览器使用的技术,需求重复开发插件功能。发布应用成本相对较高,效率也低,对经常需要修改或扩展功能的客户端程序维护相对复杂,而且浏览器的升级换代也会造成客户端组件被迫升级。

2 解决思路

针对目前编写支持所有浏览器的客户端功能扩展组件的实现过于复杂,本文提出一种支持所有浏览器的客户端功能扩展组件的实现方法。实现一个通用的支持所有浏览器的客户端功能扩展组件的技术框架,使用所有浏览器都必须支持的HTTP技术来统一实现客户端功能扩展,不依赖于浏览器本身的插件技术,同时也可以无限扩展组件的功能,有效低降低Internet上发布跨浏览器插件的成本。

提供的支持所有浏览器的客户端功能扩展组件的实现方法,是基浏览器的HTTP协议实现的,浏览器本身是一个支持HTTP协议调用的客户端,可以发出标准的HTTP请求,并将请求的返回的HTML显示在页面上。

主要思路是在本地操作系统中实现一个轻量级的HTTP服务程序框架,浏览器通过HTTP协议与这个HTTP服务程序交互,通过这个客户端封装的Javascript Api, 浏览器可以实现与本地HTTP服务程序交互,并可以调用HTTP服务程序中的扩展功能模块,实现支持所有浏览器的客户端功能扩展的方法。

3 技术实现

在客户端开发一个HTTP服务程序软件,该软件以操作系统服务形式安装 ,如WINDOW操作系统下为window Services并运行在session0/system用户权限中,在LINUX操作系统下为etc/init.d。

安装到客户端的本地轻量的HTTP服务软件,可以采用操作系统服务的方式安装,自启动的方式,这个软件各种开发语言都很容易实现,技术上有可行性,开发难度也不大,主要的设计要包括:插件式的框架,可加载外部的模块,实现功能的扩展,将功能的接口統一标准化,输入与输出采用与页面一样的JSON或XML标准,可判断本地插件模块的版并下载更新。

提供浏览器与本地HTTP服务程序交互的API,浏览器通过标准的HTTP访问技术与HTTP服务器交互,因本地HTTP服务与WEB应用本身的远程服务器不可能在同一个网络域,可以通过所有浏览器都支持的标准script标签解决HTTP跨域访问的问题,JS的API库的封装,浏览器页面是采用JS与本扩展功能交互的,因为跨域问题,无法直接采用AJAX的异步方式调用,但可以采用标准script标签来发出HTTP请求,可将访问的方式用JS封装,提供页面调用的API。一般包括以下几个接口:

a) Init: 初始化服务DLL,主要实现注册服务接口的初始化,

b) Exec: 调用当前服务DLL下的功能函数,如以下形式:

1. Exec(String funName,StringBuffer inParams) return StringBuffer;

2. 输入参数区:inParams 将调用该功能的所有参数传入,参数区实现也是采用JSON串如:{param1:val1,param2:val2,……}

c) Exit: 卸载服务

d) Call: 该服务是一个代理服务,内部调用Init/Exec/Exit独立完成一次功能调用,参数与Exec相同

具体功能的插件,建议以DLL的模块方式,可动态加载,并灵活扩展,当然也可以根据HTTP服务软件的技术体制,设计插件的具体形式,本地机器上的扩展功能通过开发功能DLL(动态连接库模块),可将DLL放入WEB应用远程服务器,本地的HTTP服务器在调用时将该DLL下载到本地进行调用,如果本地版本与服务器版本不一致,将重新更新本地的服务DLL.

当用户使用页面交互功能时,程序页面通过提供的API方法CallExtension(‘模块名称,函数名称),该方法按功能模块的DLL名称来调用具体该模块中的功能函数。

本地HTTP服务程序加载服务DLL,然后根据功能名称查找到服务DLL中的功能函数,并将服务DLL中的功能函数接口模式进行了统一的规范,所有的功能函数都使用简单的IPO(输入缓存区-处理-输出缓存区)定义,将输入参数设置入输入缓存区,进行统一的调用处理后,将结果输出到输出缓存区。

4 结束语

本文提供支持所有浏览器的客户端功能扩展组件的实现方法,在不修改代理框架的情况下,可以无限扩展组件的功能,有效代替目前Internet上发布跨浏览器插件。实现一种本地HTTP WEB服务器的技术,将浏览器控件以提供的功能转化为服务,并将服务功能独立与浏览器本身,使用DLL(动态连接库)技术实现扩展的具体功能实现。国为使用HTTP协议交互,所以支持所有当前的浏览器技术,可以无限扩展组件的功能,有效代替目前Internet上发布跨浏览器插件。

(作者单位:南京莱斯信息技术股份有限公司)

作者简介:苏祖辉(1978- ) ,男 ,本科,技术专家,工程师 ,主要研究方向为计算机系统架构应用。

猜你喜欢

调用插件组件
创建Vue组件npm包实战分析
光伏组件热斑对发电性能的影响
智能机械臂
用好插件浏览器标签页管理更轻松
请个浏览器插件全能管家
基于Android Broadcast的短信安全监听系统的设计和实现
基于jQUerY的自定义插件开发
利用RFC技术实现SAP系统接口通信
嵌入式组件技术的研究及应用
美国社交网站的周末大战