QyPlugin 琼羽浏览器中间件
前言
琼羽中间件,旨在实现兼容多浏览器插件通用开发变得简单便捷,通过WebSocket技术,使用浏览器js调用本地应用程序,并具备本地可视化应用界面嵌入于浏览器之中,对于用户操作更加人性化。
琼羽中间件原则上,在windows系统下支持WebSocket的游浏览器都能兼容,Chrome、Edge、360、Firefox、IE、钉钉、企业微信等。
客户端下载地址一:https://gitee.com/qy-sky/qyplugin
下载地址二: https://pan.baidu.com/s/1mWTd-kg5sSVzApLjPwNB3Q 提取码: wbav
后台访问地址:https://plugin.qy-sky.com
中间件原理
浏览器通过websocket,向中间件发送参数指令,中间件在浏览器中内嵌入本地应用程序窗口、或后台服务,使其在用户界面使用上,与IE之于ActiveX无异,来增强各浏览器功能。
中间件安装
安装步骤:
- 下载“琼羽中间件”安装包,解压到电脑硬盘(建议不出现中文路径,并且不会被误删除文件夹路径下);
- 右键“install.bat”,以管理员运行;
- 按提示继续安装,安装过程中如出现杀毒软件误报请,请“允许运行”;
- 安装成功后,可通过“https://plugin.qy-sky.com/wsdemo/index.html”,进行demo演示操作;
- 安装成功后,可通过URL Protocol启动应用程序,例:
<a href="qyplugin://" >启动</a>
。
激活方式
通过访问登录“https://plugin.qy-sky.com”后台,即送“基础版”、“企业版”激活序列号。试用周期为30天,自激活之日算起。
基础版免费开放:文件上传下载、文件读写功能等,请求类型为“Base”基础功能。
激活步骤:
系统右下角,鼠标移至琼羽中间件右键打开琼羽中间件“激活工具”。
在线激活
登录https://plugin.qy-sky.com,打开菜单“授权|订单➽设备授权”
复制列表中“序列号”填入激活工具,并点击激活工具“联网激活”激活工具。
离线激活
复制激活工具“硬件指纹”,登录https://plugin.qy-sky.com,打开菜单“授权|订单➽设备授权”
点击“激活”下载“license .zip”包,并在离线激活中上传激活包即可。
序列号说明
- 一个序列号只能激活一个PC;
- 测试版有效期为一个月,并在使用过程中需要不定时联网,正式版可以断网使用;
- 在PC硬件不损坏、不更换情况下,序列号有效。否则,序列号需要重新购买激活。
序列号替换
正式版序列号需要替换时,可以直接清空安装目录下“license”文件下内容。重新按上述所示方法激活即可。
中间件使用
视频讲解: https://haokan.baidu.com/v?vid=3670053918851074121
中间件启动
- 中间件安装成功后,开机会自启动;
- 通过URL Protocol启动客户端。如下代码:
例:<a href="qyplugin://" >启动</a>
。
建议勾选“始终允许”:
中间件设置
系统右下角,鼠标移至琼羽中间件右键打开琼羽中间件“设置”。
ws端口:设置琼羽中间件客户端websocket服务端口,默认为:19002,当端口更改时保存后会重启WebSocket服务,此时,浏览器端链接中间件端口也应随其修改进行链接。
安全:该设置功能,主要为了限制非法网页无法访问中间件,默认不开启,开启后,需设置密码,密码必须以字母开头,长度在6~18之间,只能包含字母、数字和下划线。
启动密码访问后,所有请求参数必须加入password键值。
注:如需批量安装中间件,可在一台电脑配置好后,复制安装目录下“qyplugin.ini”及其他文件到其他电脑安装即可。
浏览器端使用测试
中间件提供在线web测试网页:https://plugin.qy-sky.com/wsdemo/index.html。
输入ws地址,点击连接,链接成功,会出现“连接成功,现在你可以发送信息啦”。请确保中间件客户端安装成功。
- ws地址
例:ws://127.0.0.1:19002/testwebsocket;
组成:”ws://”+”127.0.0.1”+”:”+”端口号”+”/”+”key值”;
只有IP为127.0.0.1方可连接琼羽中间件ws服务。端口号可通过中间件设置进行修改,ws地址修改至相应端口号即可。
key值:为链接唯一标识值,该值可自定义,该值的意义在于,有多个链接中间件时,浏览器向中间件发送参数指令时,识别区分相对应的参数指令操作。
-
请求方式
浏览器与中间件之间采用WebSocket协议进行通讯,以JSON格式参数向中间件发送业务请求,中间件以JSON格式数据返回处理结果集。请求参数请使用压缩后JSON数据。 -
发送参数
例:
{
"reqType":"ActiveX",
"retUniqueId":"23423sdrfas234q12214234asr234",
"methodName":"MoveWindowAx",
"methodParams":{
"x":50,
"y":50,
"width":50,
"height":40
},
"password":"a12345"
}
上述参数:调用ActiveX插件,请求函数为 MoveWindowAx(x,y,width,height)。不同函数请求参数会有所区别,详情请看“参照说明”章节。请注意大小写。
-
返回参数
例:
{
"retUniqueId":"23423sdrfas234q12214234asr234",
"retValue":"",
"success":true
}
参数说明
基础功能说明
- 测试ws是否可用
发送参数:
例:
{"reqType":"Base","retUniqueId":"23423sdrfas234q12214234asr234","methodName":"TestWs","methodParams":{},"password" : "a12345"}
返回参数:
例:
{"retUniqueId":"23423sdrfas234q12214234asr234","retValue":"","success":true}
- 上传文件
发送参数:
例:
{"reqType":"Base","retUniqueId":"23423sdrfas234q12214234asr234","methodName":"UploadFiles","methodParams":{"filePathNames":["C:\\ZKFingerDrv.zip","C:\\1.zip"],"uploadUrl":"http://localhost/testupload","delAfterSuccess":true,"extraParams":[{"name":"token","value":"tokenvalue"}]},"password":"a12345"}
注:post方式提交
- 下载文件
发送参数:
例:
{"reqType":"Base","retUniqueId":"23423sdrfas234q12214234asr234","methodName":"DownloadFiles","methodParams":{"downloadInfos":[{"url":"http://localhost/2.zip","fileName":"1.zip"},{"url":"http://localhost/2.zip","fileName":"2.zip"},{"url":"http://localhost/2.zip","fileName":"3.zip"}],"savePath":"C:\\Users\\Samsung\\Desktop\\temp\\"},"password":"a12345"}
注:get方式下载
ActiveX动态调用
ActiveX动态调用,必须先创建ActiveX,后续参数发送方可起效。
说明:以下提供接口基本可以满足大多数ActiveX的使用,当无法满足要求时,可以通过改造ActiveX,或者二次开发ActiveX来达到调用的目的。
-
js创建ActiveX
发送参数:
例:
{"reqType":"ActiveX","retUniqueId":"23423sdrfas234q12214234asr234","methodName":"CreateAx","methodParams":{"clsid":"{F1317711-6BDE-4658-ABAA-39E31D3704D3}"},"hasWin":true,"width":400,"height":380,"password" : "a12345"}
-
移动窗口位置
发送参数:
例:
{"reqType":"ActiveX","retUniqueId":"23423sdrfas234q12214234asr234","methodName":"MoveWindowAx","methodParams":{"x":50,"y":50,"width":500,"height":400},"password" : "a12345"}
-
居中显示ActiveX
发送参数:
例:
{"reqType":"ActiveX","retUniqueId":"23423sdrfas234q12214234asr234","methodName":"CenterWindowAx","methodParams":{},"password":"a12345"}
-
动态调用ActiveX函数
发送参数:
例:
{"reqType":"ActiveX","retUniqueId":"23423sdrfas234q12214234asr234","methodName":"InvokeNAx","methodParams":{"lpszName":"AboutBox","varParams":[]},"password" : "a12345"}
注:
InvokeNAx使用请参照调用ActiveX IDispatch接口的使用函数。
返回参数:
例:
{"retUniqueId":"23423sdrfas234q12214234asr234","retValue":"-1","success":true}
-
动态调用ActiveX属性函数
发送参数:
例:
{"reqType":"ActiveX","retUniqueId":"playlist_add","methodName":"InvokePAx","methodParams":{"propertyNames":["playlist"],"lpszName":"add","varParams":["file:///C:\\基础功能使用.avi"]},"password":"a12345"}
-
获取ActiveX属性值
发送参数:
例:
{"reqType":"ActiveX","retUniqueId":"23423sdrfas234q12214234asr234","methodName":"GetPropertyByNames","methodParams":{"propertyNames":["NameS","NameL","Sex","SexL","Nation","NationL","Born","BornL","CardNo","Address","newAddress"]},"password":"a12345"}
返回参数
例:
{"retUniqueId":"23423sdrfas234q12214234asr234","retValue":{"Address":"","Born":"","BornL":"","CardNo":"","NameL":"","NameS":"","Nation":"","NationL":"","Sex":"","SexL":"","newAddress":""},"success":true}
-
设置ActiveX属性值
发送参数:
例:
{"reqType":"ActiveX","retUniqueId":"23423sdrfas234q12214234asr234","methodName":"PutPropertyByNames","methodParams":{"propertyNames":[{"name":"NameS","value":"qy"}]},"password":"a12345"}