浏览器网页直接内嵌桌面exe窗口运行程序:基于跨浏览器的原生小程序系统-PluginOK中间件( PluginOK: PluginOK中间件是一个实现浏览器与桌面程序之间可双向调用的强兼容、高性能、安全可控、低成本、轻量级、易集成、可扩展、跨浏览器的原生小程序系统。通过此中间件可实现在网页中无障碍操作终端电脑连接的各种硬件设备、调用操作系统API及本地DLL功能,可彻底解决ActiveX控件及桌面自动化程序(如微软Office、金山WPS、AutoCAD等)在Chrome、Edge、360、Firefox、IE等浏览器中的嵌入使用问题,是开发丰富型、高性能、高安全及实时通信互联网应用的首选,是浏览器进行功能扩展的秘密武器,也是采用了微软Silverlight和Adobe Flex等RIA技术的ERP、CRM等系统兼容Chrome等最新版浏览器的最佳产品。PluginOK中间件提供的前端集成接口语言无关,网页中只需使用简单的JS脚本即可完成与B/S系统的对接,让浏览器成为各种信息化系统集成的最佳容器,彻底解决B/S系统的各种痛点和难点,让桌面程序迁移到浏览器中运行从此再无障碍。 )网络高级版开发,底层调用桌面WIN32的EXE程序实现内嵌网页运行,需安装或部署对应的桌面WIN32等软件,安装后确保可以正常启动显示主窗口,没有需要授权或弹窗要求登录等过程。
可用在Chrome 41、Firefox 50、Edge 80(Chromium内核)、IE 8、Opera、Yandex、Electron、360极速/安全、豆包、夸克、QQ、搜狗、遨游、华为、联想、猎豹、齐安信、红莲花、双核等浏览器低版本,也兼容运行于这些浏览器的最新版本。
1、PluginOK中间件的安装:
下载地址:安装版本-> http://local.zorrosoft.com/Files/PluginOKNet.exe 绿色版-> http://local.zorrosoft.com/Files/WRL.zip
1)、如果是exe的安装程序,请直接运行安装;
2)、如果是绿色版的程序包,请解压到磁盘某个目录后,双击“InstallWrl.bat”进行安装;
3)、安装完成时会启动PluginOK中间件服务,在安装目录下的Data子目录有ZbaService.txt日志文件输出运行情况。
2、EXE网页小程序控制相关接口:
说明:以下功能请通过Web Socket连接PluginOK主服务(ws://localhost:83?sid=12345&flag=1,如果嵌入的exe是管理员权限启动的,请先确保浏览器本身是管理员权限启动,并且flag设置为4或5)后可执行,如默认侦听端口不是83(关于如何配置侦听端口,请参考SDK包中的文档“PluginOK开发者手册.pdf”),请在连接地址中指定端口号进行连接。
HTTP网页在线测试:http://local.zorrosoft.com/exefull.html HTTPS网页在线测试:https://local.zorrosoft.com/exeframe.html
如还需兼容IE浏览器使用,网络版测试网页中 <object ID="WrlWS" CLASSID="CLSID:C0971B90-4513-4E2D-A0B6-15B915FE748A" width="0" height="0"></object>
的CLSID需要替换为:21ADE2E6-B4DD-4F3E-8BD5-9DDAD1785F3A
前端集成可参考以上测试网页进行,需要嵌入用到的JS脚本,脚本程序是完全开源的。
1)、请求启动EXE网页小程序:
Type为浏览器类型,传0自动判断(前提是当前浏览器已启动并显示在最前端,Flag指定当前页加载时必须是0) 可强制指定浏览器类型Type(1代表IE 2代表Chrome 4代表Firefox 5代表Brave(英文版) 8代表Opera 9代表Vivaldi(英文版) 10代表Yandex 16代表Edge(Chromium内核) 20代表Electron 32代表360极速浏览器 33代表360安全浏览器 34代表360极速浏览器 35代表360企业安全浏览器 36代表360游戏浏览器 37代表360AI浏览器 40代表联想浏览器 45代表双核浏览器 50代表QQ浏览器 51代表微信网页 55代表齐安信浏览器 57代表红莲花浏览器 60代表搜狗浏览器 61代表夸克 62代表遨游浏览器 63代表猎豹浏览器 66代表豆包 70代表华为浏览器)
Type需要指定浏览器类型时,可先通过TestWrl.txt文档中的接口Wrl_BrowserInfo获取到当前浏览器的类型Type、浏览器主窗口句柄BrowserWnd、浏览器绘制窗口句柄DrawWnd及当前网页标题Title,通过判断Title是否为当前网页需要内嵌决定是否继续启动,如果继续启动,把获取到的参数Type、BrowserWnd、DrawWnd设置到当前请求参数里,可以加快启动速度
Title:网页标题中的关键词,用于识别指定的嵌入网页
Url:加载小程序所在的网页实际地址,在网页中指定小程序的显示位置和大小,不建议使用了,建议改用Web参数
Flag:掩码标记 1指定新标签加载(1和16都不指定时为当前页加载) 2小程序显示窗口边框 4不自动裁剪越界窗口 8自动适配网页高度和宽度显示 64启用Web参数 128防截屏 256强制显示到副屏 512允许同一网页加载多实例
Web:打开配置(新增方式),可代替Url使用,Flag值+64使用此配置,使用Web时必须指定Left、Top、Width、Height的值
Web中参数说明:
Edit 代表编辑权限 1只读打开
Flag 代表选项掩码值 1代表直接嵌入已打开的指定程序 2是不用下载打开 4是不用核对打开文档文件名在主窗口显示
DataPath 代表如果文档下载时默认的本地保存路径
ExeName 代表启动和实际运行的exe文件名不一致时设置实际运行程序名
Cookie 当Open打开的文档是服务器上的Url地址时,网络请求Url设置Cookie来获得下载权限
Auth 当Open打开的文档是服务器上的Url地址时,网络请求Url设置Auth来获得下载权限
MD5 当打开的文档需要下载时,完整文档的MD5值
FileSize 当打开的文档需要下载时文件长度
IframeX和IframeY分别为iframe嵌套的横竖偏移修正坐标
BarW和BarH分别是网页右侧和底部预留区域,ScrollTop为顶部滚动预留高度
小程序实际显示首先会基于Url或Web中指定的坐标和大小,再根据IframeX、IframeY、BarW、BarH设定的值做修正
Option:默认0是数科OFD阅读器 1:启动福昕OFD版式办公套件
Open:为exe程序需要打开的文件或服务器地址,磁盘目录斜杠用/
注意:Open、Web和Url如果有特殊字符= & 双引号或中文等,需要用URL编码处理后传递
举例:
自动识别当前浏览器指定位置和大小启动:
{"req":"Wrl_AppletStart","rid":2,"para":{"Type":"0","Title":"EXE网页小程序","NodeName":"ExeWebApplet","PID":"ExeWebApplet","Flag":66,"Left":20,"Top":20,"Width":480,"Height":320,"IframeX":0,"IframeY":210,"BarW":0,"BarH":0,"Option":"0","Option":"0","Web":{"DataPath":"c:/ExeDoc","ExeName":"","ExePath":"","PathType":""},"Open":"http://zorrosoft.com/Files/test.pdf"}}
自动识别当前浏览器自动适配网页大小启动:
{"req":"Wrl_AppletStart","rid":2,"para":{"Type":"0","Title":"EXE网页小程序","NodeName":"ExeWebApplet","PID":"ExeWebApplet","Flag":72,"Left":0,"Top":0,"Width":0,"Height":0,"IframeX":0,"IframeY":0,"Option":"0","Option":"0","Zoom":100,"ScrollTop":0,"Web":{"DataPath":"c:/ExeDoc","ExeName":"","ExePath":"","PathType":""},"Open":"http://zorrosoft.com/Files/test.pdf"}}
当前页指定位置自动适配网页加载测试
http://local.zorrosoft.com/exeframe.html
启动后会先后收到三个JSON数据包
A、{"ret":0,"rid":2,"data":{"ID":2}}
代表小程序WS侦听服务就绪
B、{"event":"Wrl_Listen","aid":2,"rid":2,"data":{"SID":"123","PID":"ExeWebApplet","port":2000}}
返回的侦听端口,可再建立一个Web Socket连接后,调用小程序中的相关功能,比如新播放一个Flash。
代表小程序创建成功,返回ID为当前小程序运行实例ID,通过此ID,可执行Wrl_AppletControl、Wrl_AppletScroll、Wrl_AppletResize等命令。
C、{"event":"Wrl_AppletOK","aid":2,"rid":2,"data":{"SID":"123","PID":"ExeWebApplet","Port":2000}}
2)、请求控制OFD网页小程序:
当前端不再需要小程序时可指定关闭,或者显示/隐藏及全屏显示等
ID为Wrl_AppletStart指定ExeWebApplet启动小程序时返回JSON中的ID值,Code代表控制类型掩码:1正常关闭 128强制迅速关闭 2全屏显示 4自动隐藏 8还原显示 16自动适配网页高度和宽度显示模式切换 32强制隐藏。其中全屏显示2,可直接通过热键ESC或取消,4和32隐藏后可通过8恢复显示
{"req":"Wrl_AppletControl","rid":2,"para":{"ID":"1","Code":4}}
3)、请求滚动网页中EXE网页小程序:
当前端截取到网页滚动通知时,需要调用此接口实现小程序和网页的滚动联动
ID为启动小程序时返回JSON中的ID值
Code为滚动方向1是水平直,2是垂直,3是同时
Left为横向滚动条位置,Top为纵向滚动条位置
{"req":"Wrl_AppletScroll","rid":3,"para":{"ID":"1","Code":2,"Left":0,"Top":100}}
4)、请求改变网页中EXE网页小程序显示位置或大小:
当前端网页显示区域缩放时,可动态修改小程序的显示位置或大小
ID为通过Wrl_AppletStart指定ExeWebApplet启动小程序时返回JSON中的ID值,Width和Height分别为新的宽度和高度
X和Y分别为新的显示位置,不指定时保持不变,指定时原设置的IframeX和IframeY失效
{"req":"Wrl_AppletResize","rid":4,"para":{"ID":1,"Width":500,"Height":600}}
或,同时修改小程序显示起始坐标
{"req":"Wrl_AppletResize","rid":5,"para":{"ID":1,"Width":500,"Height":600,"X":20,"Y":20}}
5)、请求设置网页预留右侧宽度和底部高度,滚动条信息、垂直滚动及水平滚动位置:
当小程序显示区域超过当前网页时,需去除滚动条的显示影响
ID为通过Wrl_AppletStart指定ExeWebApplet启动小程序时返回JSON中的ID值,BarW为预留右侧宽度 BarH为预留底部高度
Code 1代表有水平滚动条,2代表有垂直滚动条,3代表都有
ScrollTop垂直滚动条位置 ScrollTop水平滚动条位置
{"req":"Wrl_ScrollBar","rid":6,"para":{"ID":"1","Code":2,"BarW":0,"BarH":0,"ScrollTop":0,"ScrollLeft":0}}
6)、请求对小程序窗口做Alpha透明处理,便于前端临时显示覆盖到小程序窗口的菜单等:
ID为通过Wrl_AppletStart指定ExeWebApplet启动小程序时返回JSON中的ID值,Alpha为透明度百分比,1-100
{"req":"Wrl_AppletAlpha","rid":7,"para":{"ID":1,"Alpha":30}}
7)、请求对小程序窗口内容进行截图:
ID为通过Wrl_AppletStart指定ExeWebApplet启动小程序时返回JSON中的ID值,
File为指定截图文件保存路径或扩展名
Base64指定为1时代表返回BASE64编码的图像内容
{"req":"Wrl_AppletSnap","rid":10,"para":{"ID":1,"Base64":1,"File":".jpg"}}
8)、请求缩放内嵌网页小程序,用于浏览器网页按比例缩放,一般不需要处理:
ID为通过Wrl_AppletStart指定ExeWebApplet启动小程序时返回JSON中的ID值,不指定Scale时,获取当前小程序所用的缩放百分比,一般和系统缩放比例一致
{"req":"Wrl_AppletScale","rid":11,"para":{"ID":1,"Scale":120}}
3、小程序安装、升级、卸载
1)、请求安装EXE网页小程序
请在测试网页输入框中,输入如下请求,然后点击发送,完成安装:
{"req":"Plugin_Install","rid":1,"para":{"Name":"Exe网页小程序","PID":"ExeWebApplet","Date":"2025-02-28","Desc":"PluginOK之上跨浏览器的Exe内嵌网页小程序,支持在Chrome、Edge、Firefox、IE、Oprea、360、QQ等最新版本浏览器网页中内嵌各种桌面程序","DownAddr":"http://local.zorrosoft.com/Files/Net/ExeWebApplet.pid","MD5":"C486982AA192FEEF1D4A829F8B394D9C","Version":"2.2.17.1","Size":557056,"HideIns":0,"Type":8,"Cookie":"","Auth":"","TK":"ACAE516E1A763CA6094D7465F2A01A9B910FC5C19712A7A2060535C1467C97B3B59F9124E70F32910533BEF649F8D3072F8D7A8C9348BF1BAF0A88AA7F2C2DA801D21BFB0006927C7AE0CB6BE946AD8A2F542A2A82507D1AB20FDA57B5C1CC03A95165EBF9C1E34ABA21E6EFD37A86CC40BAC3C8BC20BBF2C6051D430B3394C3B5FE7BCB71900C54ECA27A24A34E24AE190C9B31923B903CD34E67BBC6026B08AD4E13ADCFA247DC355439B7A05422D4D1A0B9BFD237FF81F7F9C7636AC287BFC4BB5E1CF7E3121FEE432A3828023568EF53861E46977D23BF8D7A3A5F699FEAD0D1484854A0BB1A142463317AC74AFD49FED426A544AE02ACB658A78A440431"}}
启动安装后,会不断收到安装进度直到安装结束。
2)、请求升级EXE网页小程序:
{"req":"Plugin_Update","rid":1,"para":{"Name":"Exe网页小程序","PID":"ExeWebApplet","Date":"2025-02-28","Desc":"PluginOK之上跨浏览器的Exe内嵌网页小程序,支持在Chrome、Edge、Firefox、IE、Oprea、360、QQ等最新版本浏览器网页中内嵌各种桌面程序","DownAddr":"http://local.zorrosoft.com/Files/Net/ExeWebApplet_Update.pid","MD5":"14716E099651BDC9ADB524B4DBF44729","Version":"2.2.17.1","Size":557056,"HideIns":0,"Type":8,"Cookie":"","Auth":"","TK":"14E569B6B7286F7F70F9D0A46D64A9FBAD5AC293D6E4F73ADFC8BB2AD24594E3EEAB23A82F610D1277B9B41A5F920DC49E26407CCA0E38F40C0F1900C5F9A1E795B52560AC93C377BE6E7277DA758AC30C75B1CF2B01756C79353FAD8CDCD680F096DB36F931EF5DF08548CC39E8FB268326EA0C1B5668B20031D8EF4CE9D5EB6059499E34466553B10644323F89798DB853136835F6852FEF8C79C708200032CB14A1051E0FD24E7C27AD04687E08271074C2511950A587E419AC25F7DD16ADDE96B79D3517498509A9B6CF78983BA2C4B048E60E36FB6C0DB0B7E64B87666709EC5085F69540DC90B3DED13FB363B7A8469E047BDD1A59CDD856C6A7A40ED6"}}
以上安装和升级的JSON请求包,可能因版本升级导致内容不同,如遇安装或升级时报错,请联系客服获取最新的请求包。
3)、请求卸载EXE网页小程序:
正式版需要添加TK校验,具体规则请参考SDK包中文档“PluginOK中间件安全解决方案.doc”,可在SDK包中的打包程序ZbaPackage.exe的中间件维护生成带TK的请求。
{"req":"Plugin_Remove","rid":3,"para":{"PID":"ExeWebApplet","Type":8}}
4、EXE网页小程序转调用指定的EXE程序打开文档,先根据通过Wrl_AppletStart指定ExeWebApplet请求启动后返回的端口号,新建立一个WebSocket连接后可执行如下指令:
A、常用功能请求:
1) 指定文件载入打开
File 本地文件路径或网络路径,\斜杠替换为反斜杠/,有特殊支付或中文等先做UrlEncode编码
其它参数参考启动时Web子节点设置
请求1:{"req":"EXE_LoadFile","rid":50,"para":{"File":"d:/Zorro/test.pdf"}}
请求2:{"req":"EXE_LoadFile","rid":50,"para":{"File":"http://www.zorrosoft.com/Files/test.pdf"}}
返回:{"ret":0,"rid":50,"data":{"Ret":"0"}}
ret为请求返回值,0正常,非零不正常,不正常时请取和ret同级的错误描述err,下同
2) 获取版本信息
请求:{"req":"EXE_GetVersion","rid":51,"para":{}}
返回:{"ret":0,"rid":51,"data":{"Ret":"0","Version":""}}
3) 请求退出小程序
未连接到小程序侦听WS端口时直接关闭到中间件的WS连接即可
请求:{"req":"EXE_Exit","rid":80,"para":{}}
无返回
5、EXE网页小程序接收的通知:
这些通知必须通过WebSocket连接到此小程序侦听的端口才能接收到。
1) EXE_FullScreen 小程序是否响应了热键全屏
{"event":"EXE_FullScreen","data":{"FullScreen":0}} FullScreen为当前是否全屏标记
2) Wrl_AppletExit 小程序退出通知
{"event":"Wrl_AppletExit","data":{"ID":1}}
6、其它
请求参数的JSON数据包,请确保是UTF-8无签名的编码。
更多接口请求说明,请参考安装目录中的文档TestWrl.txt和SDK包中的“PluginOK开发者手册.pdf”。