IE控件内嵌网页小程序:基于跨浏览器的原生小程序系统-PluginOK中间件( https://github.com/wangzuohuai/WebRunLocal )网络高级版开发,底层调用IE内核的ActiveX控件实现可程序化驱动的双内核浏览器。 可用在Chrome 41、Firefox 50、Edge 80(Chromium内核)、IE 8、Opera、Yandex、Electron、360极速/安全、豆包、夸克、QQ、搜狗、遨游、华为、联想、猎豹、齐安信、红莲花、双核等浏览器低版本,也兼容运行于这些浏览器的最新版本。 1、PluginOK中间件的安装: 1)、如果是exe的安装程序,请直接运行安装; 2)、如果是绿色版的程序包,请解压到磁盘某个目录后,双击“InstallWrl.bat”进行安装; 3)、安装完成时会启动PluginOK中间件服务,在安装目录下的Data子目录有ZbaService.txt日志文件输出运行情况。 2、IE控件小程序控制相关接口: 说明:以下功能请通过Web Socket连接PluginOK主服务(ws://localhost:83?sid=12345&flag=1)后可执行,如默认侦听端口不是83(关于如何配置侦听端口,请参考SDK包中的文档“PluginOK开发者手册.pdf”),请在连接地址中指定端口号进行连接。 HTTP网页在线测试:http://local.zorrosoft.com/iefull.html HTTPS网页在线测试:https://local.zorrosoft.com/ieframe.html 如还需兼容IE浏览器使用,网络版测试网页中 的CLSID需要替换为:21ADE2E6-B4DD-4F3E-8BD5-9DDAD1785F3A 前端集成可参考以上测试网页进行,HTML网页中需要嵌入以下类似代码; A、标记小程序的显示位置和大小 .IEApplet { margin: 20px 0 0 20px; width: 480px; height: 320px; border: 1px solid blue; } 或者 .IEApplet { width: 480px; height: 320px; top: 20px; left: 20px; border: 1px solid blue; } 如果在网页Header区没有标记小程序初始显示位置和大小,请在启动小程序的JSON参数里,添加以下参数: "Left":20,"Top":20,"Width":480,"Height":320 B、网页中嵌入元素 支持IFrame的: 或者直接用 另外需要嵌入用到的JS脚本,脚本程序是完全开源的。 1)、请求启动IE控件小程序实现网页中局部加载IE内核网页显示: 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自动适配网页高度和宽度显示 128防截屏 Version:指定加载的IE版本,0不指定,比如9999是IE9标准模式 8888是IE8标准模式 8000是IE8兼容模式 7000是IE7 详细定义参考:https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/general-info/ee330730(v=vs.85)?redirectedfrom=MSDN#browser_emulation Web:网页配置,可实现Chrome等浏览器的网页和IE内核的网页共享Cookies以自动登录,指定Web时无需Url参数,需要设置小程序的显示位置和大小,对应参数Left、Top、Width、Height等 Option:1指定启动64位版 Open:为需要用IE内核打开的Url地址或本地网页地址 IframeX和IframeY分别为iframe嵌套的横竖偏移修正坐标 BarW和BarH分别是网页右侧和底部预留区域,ScrollTop为顶部滚动预留高度 小程序实际显示首先会基于Url或Web中指定的坐标和大小,再根据IframeX、IframeY、BarW、BarH设定的值做修正 注意:Open和Web如果有特殊字符= & 双引号或中文等,需要用URL编码处理后传递 举例: 自动识别当前浏览器指定位置和大小启动: {"req":"Wrl_IEApplet","rid":1,"para":{"Type":"0","Title":"IE Applet","Flag":2,"Version":"0","Option":"0","IframeX":0,"IframeY":0,"BarW":0,"BarH":0,"ScrollTop":0,"Url": "http://local.zorrosoft.com/IEApplet.html","Open":"http://www.zorrosoft.com"}} 自动识别当前浏览器指定位置和大小启动(指定共享Cookie,不需要Url): {"req":"Wrl_IEApplet","rid":1,"para":{"Type":"0","Title":"IE Applet","Flag":66,"Left":20,"Top":230,"Width":480,"Height":320,"Version":"0","Option":"0","Left":20,"Top":230,"Width":480,"Height":320,"IframeX":0,"IframeY":0,"BarW":0,"BarH":0,"ScrollTop":0,"Open":"http://www.zorrosoft.com","Web":"UID=zorro;Cur=2"}} 自动识别当前浏览器指定位置自动适配网页大小启动: {"req":"Wrl_IEApplet","rid":1,"para":{"Type":"0","Title":"IE Applet","Flag":72,"Left":0,"Top":0,"Width":0,"Height":0,"Version":"0","Option":"0","IframeX":0,"IframeY":0,"BarW":0,"BarH":0,"ScrollTop":0,"Open":"http://www.zorrosoft.com","Web":"UID=zorro;Cur=2"}} 当前页指定位置自动适配网页加载测试 http://local.zorrosoft.com/ieframe.html 启动后会先后收到三个JSON数据包 A、{"ret":0,"rid":1,"data":{"ID":3}} 代表小程序WS侦听服务就绪 B、{"event":"Wrl_Listen","aid":3,"rid":1,"data":{"SID":"123","PID":"18BDC030-AF37-50E1-B0AE-E5EF336BE282","port":985}} 返回的侦听端口,可再建立一个Web Socket连接后,调用小程序中的相关功能,比如新打开一个网页。 代表小程序创建成功,返回ID为当前小程序运行实例ID,通过此ID,可执行Wrl_AppletControl、Wrl_AppletScroll、Wrl_AppletResize等命令。 C、{"event":"Wrl_AppletOK","aid":3,"rid":1,"data":{"SID":"123","PID":"18BDC030-AF37-50E1-B0AE-E5EF336BE282","Port":985}} 2)、请求控制IE控件小程序: 当前端不再需要小程序时可指定关闭,或者显示/隐藏及全屏显示等 ID为启动小程序时返回的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)、请求滚动IE控件小程序: 当前端截取到网页滚动通知时,需要调用此接口实现小程序和网页的滚动联动 ID为启动小程序时返回JSON中的ID值 Code为滚动方向1是水平直,2是垂直,3是同时 Left为横向滚动条位置,Top为纵向滚动条位置 {"req":"Wrl_AppletScroll","rid":3,"para":{"ID":"1","Code":2,"Left":0,"Top":100}} 4)、请求改变IE控件小程序显示位置或大小: 当前端网页显示区域缩放时,可动态修改小程序的显示位置或大小 ID为启动小程序时返回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为启动小程序时返回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_IEApplet启动小程序时返回的ID值,Alpha为透明度百分比,1-100 {"req":"Wrl_AppletAlpha","rid":7,"para":{"ID":1,"Alpha":30}} 7)、请求对小程序窗口内容进行截图: ID:启动小程序时返回JSON中的aid实例值 File:指定截图文件保存路径或扩展名 Base64:指定为1时代表返回BASE64编码的图像内容 Flag:如嵌入的小程序窗口(比如是DirectUI或Direct3D绘制)抓图不正常,可额外指定为1看效果,此外如果需要多次或框选抓图,可叠加2或4单独启动抓图工具来实现 {"req":"Wrl_AppletSnap","rid":10,"para":{"ID":1,"Base64":1,"Flag":2,"File":".jpg"}} 8)、请求缩放内嵌网页小程序,用于浏览器网页按比例缩放,一般不需要处理: ID为启动小程序时返回JSON中的ID值,不指定Scale时,获取当前小程序所用的缩放百分比,一般和系统缩放比例一致 {"req":"Wrl_AppletScale","rid":11,"para":{"ID":1,"Scale":120}} 3、小程序安装、升级、卸载 1)、请求安装IE控件小程序 请在测试网页输入框中,输入如下请求,然后点击发送,完成安装: {"req":"Plugin_Install","rid":1,"para":{"Name":"IE控件小程序","PID":"18BDC030-AF37-50E1-B0AE-E5EF336BE282","Date":"2025-05-30","Desc":"PluginOK之上跨浏览器的IE内核网页小程序,支持在Chrome、Edge、Firefox、IE、Oprea、360、QQ等最新版本浏览器网页中内嵌使用","DownAddr":"http://local.zorrosoft.com/Files/Net/IEApplet.pid","MD5":"E908F0041B4EBEC3AEC8A527F89B14F3","Version":"2.2.17.6","Size":851968,"HideIns":0,"Type":8,"Cookie":"","Auth":"","TK":"9E687264466D444CD9469966F5743D74315623A712B9EE61096892E7ABE55D396BC8282272B285A49DEE01E1BBC05DBFA5E139BF74865336D4DECF9FAC0B92D678804330BF00F13D71EB73AD72AAEAB98F46ECE853C4E1D9C44CC5983F80CEEB6DD5ADCC0405857952215B9FF713A559A4735A1E703634381435727BA9AF3FFD2F30745739AE2EFA5F5E996E0AB8C9916F95DE3FB5FC7CE7F14DDF3308B4A813A85A07686363488D1F834D59FBFA918FC45FA4A94FD6F85FE17C028A347292A933E5C102AB7A736BD7BCA294CEF23DFD8F833CA08C7A2E9EF510BE3B792D281971ED99959B466CC15A7635F804C8B914C6BD80B05CA7F6F35E565C12146300EB"}} 启动安装后,会不断收到安装进度直到安装结束。 在发布时,也可以把此小程序目录文件和中间件一起打包后发布,不用单独分发。 2)、请求升级IE内核内嵌小程序: {"req":"Plugin_Update","rid":1,"para":{"Name":"IE控件小程序","PID":"18BDC030-AF37-50E1-B0AE-E5EF336BE282","Date":"2025-05-30","Desc":"PluginOK之上跨浏览器的IE内核网页小程序,支持在Chrome、Edge、Firefox、IE、Oprea、360、QQ等最新版本浏览器网页中内嵌使用","DownAddr":"http://local.zorrosoft.com/Files/Net/IEApplet_Update.pid","MD5":"9B4EFA6F58F677826B75D03C3638F8FF","Version":"2.2.17.6","Size":851968,"HideIns":0,"Type":8,"Cookie":"","Auth":"","TK":"9140D89C22455FCA5A94E07F1677CBB066D4A5F187FE4B3B8C74667CB9C8054CA9A08CB17636B78CC3A3F8AC09D73F50C79B9A204C47F8C933A1A0E41D6FD7DA8EDFFCADFCCD35E32B76805225AD63966456FAD7957999147073A5AD65CB9CC1E3E2329708E1F9FA93BB8CFB9F4BCBE8A0CB778DBAF511112D91F2D7092534DB007BBCCA17ABB3DFF8660324F6E8B043D052FFE1602073CC1C41FAE154C9907CBA9DB0F2191803B0AB224D4DDE6191B3CA923C30A1116C2006553B4CD545F7FF39E61077B955362371DD51B095DE20E59244E5A9A8E64A6BBC4F57FA9BBCEFB0C813AE1A7D765FB60B0462C7D6F6F9CF6626C762288D22594DA7301C24CC19C5"}} 以上安装和升级的JSON请求包,可能因版本升级导致内容不同,如遇安装或升级时报错,请联系客服获取最新的请求包。 3)、请求卸载IE控件小程序: 正式版需要添加TK校验,具体规则请参考SDK包中文档“PluginOK中间件安全解决方案.doc”,可在SDK包中的打包程序ZbaPackage.exe的中间件维护生成带TK的请求。 {"req":"Plugin_Remove","rid":3,"para":{"PID":"18BDC030-AF37-50E1-B0AE-E5EF336BE282","Type":8}} 4、IE控件小程序转调用ActiveX接口,先根据Wrl_IEApplet请求启动后返回的端口号,新建立一个WebSocket连接后可执行如下指令: A、常用功能请求: 1) 停止 请求:{"req":"IE_Stop","rid":50,"para":{}} 返回:{"ret":0,"rid":50,"data":{"Ret":"0"}} ret为请求返回值,0正常,非零不正常,不正常时请取和ret同级的错误描述err,下同 Ret为调用ActiveX对应函数返回值,0代表正常 2) 刷新网页 请求:{"req":"IE_Refresh","rid":51,"para":{"Loop":"1"}} 返回:{"ret":0,"rid":51,"data":{"Ret":"0"}} Ret为调用ActiveX对应函数返回值,0代表正常 3) 回退 请求:{"req":"IE_GoBack","rid":52,"para":{}} 返回:{"ret":0,"rid":52,"data":{"Ret":"0"}} Ret为调用ActiveX对应函数返回值,0代表正常 4) 前进 请求:{"req":"IE_GoForward","rid":53,"para":{}} 返回:{"ret":0,"rid":53,"data":{"Ret":"0"}} Ret为调用ActiveX对应函数返回值,0代表正常 5) 导航到主页 请求:{"req":"IE_GoHome","rid":54,"para":{}} 返回:{"ret":0,"rid":54,"data":{"Ret":"0"}} Ret为调用ActiveX对应函数返回值,0代表正常 6) 导航到指定网页 Url为网页地址,需进行URLEncode编码,如额外指定Type为0或具体的浏览器类型,代表用非IE浏览器新标签页来打开 Cookies 导航时用的Cookies,需进行URLEncode编码 Referer 导航时用的Referer,需进行URLEncode编码 请求:{"req":"IE_Navigate","rid":55,"para":{"Url":"http://www.baidu.com","Cookies":"","Referer":""}} 返回:{"ret":0,"rid":55,"data":{"Ret":"0"}} Ret为调用ActiveX对应函数返回值,0代表正常 7) 请求执行脚本,必须等文档加载完成后 Code为需要执行的脚本内容 Language 脚本类型 请求:{"req":"IE_ExecScript","rid":56,"para":{"Code":"alert(\"hello\");","Language":"javascript"}} 返回:{"ret":0,"rid":56,"data":{"Ret":"0","ScriptRet":""}} Ret为调用返回值,0代表正常 ScriptRet执行脚本返回内容,只支持字符型,非字符型先用BASE64编码 8) 请求注入脚本,必须等文档加载完成后 Code为需要注入的脚本内容 请求:{"req":"IE_AddScript","rid":57,"para":{"Code":"alert(\"hello\");"}} 返回:{"ret":0,"rid":57,"data":{"Ret":"0"}} Ret为调用返回值,0代表正常 9) 请求调用脚本(已在打开的网页中),必须等文档加载完成后 FuncName脚本函数名称 Para函数参数 请求:{"req":"IE_InvokeScript","rid":58,"para":{"FuncName":"HelloWord","Para":["My","Name"]}} 返回:{"ret":0,"rid":58,"data":{"Ret":"0","FuncRet":""}} Ret为调用返回值,0代表正常 FuncRet调用函数返回内容,只支持字符型,非字符型先用BASE64编码 10) 缩放网页,必须等文档加载完成后 Scale缩放比例 请求:{"req":"IE_Zoom","rid":59,"para":{"Scale":100}} 返回:{"ret":0,"rid":59,"data":{"Ret":"0"}} Ret为调用返回值,0代表正常 11) 指定ID窗口叠加网页中的渲染内容,Widows 8及以上版本操作系统正常支持,本机需要安装Microsoft Edge WebView2 Runtime Url为透明网页地址,如有特殊符号请先进行UrlEncode,设置为空字符串代表取消叠加 Alpha 透明度(0-255) 默认255不透明,Windows 7及以下版本系统不支持透明 Rect节点设置叠加窗口位置和大小,不设置时代表全部区域,E代表边距默认1,X/Y/W/H分别代表叠加窗口在分屏窗口中显示的起始点和宽高,P为显示位置类型,大于0时替代X和Y,1左上 2右上 3左下 4右下 {"req":"IE_FloatWebInfo","rid":60,"para":{"Url":"https://output.jsbin.com/dopavun"}} {"req":"IE_FloatWebInfo","rid":60,"para":{"Url":"https://output.jsbin.com/dopavun","Rect":{"X":0,"Y":0,"P":0,"W":300,"H":300}}} 返回:{"ret":0,"rid":60,"data":{"Ret":0}} 12) 请求退出小程序 未连接到小程序侦听WS端口时直接关闭到中间件的WS连接即可 请求:{"req":"IE_Exit","rid":61,"para":{}} 无返回 5、事件通知: A、IE控件事件 1) IE_BeforeNavigate 准备打开新的URL {"event":"IE_BeforeNavigate","data":{"Url":""}} Url为新打开的URL地址 2) IE_NavigateComplete URL打开完成 {"event":"IE_NavigateComplete","data":{"Url":""}} Url为URL地址 3) IE_DocumentComplete URL文档加载完成 {"event":"IE_DocumentComplete","data":{"Url":""}} Url为URL地址 4) IE_NewNavigate 新窗口打开指定URL {"event":"IE_NewNavigate","data":{"Url":"","Ret":0}} Url为新URL地址 Ret为打开结果 5) IE_ProgressChange 进度条进度通知 {"event":"IE_ProgressChange","data":{"Progress":0,"Max":0}} Progress当前进度 Max进度最大值 6) IE_SetSecureLockIcon 设置安全锁定图标 {"event":"IE_SetSecureLockIcon","data":{"SecureLockIcon":0}} 7) IE_StatusTextChange 状态变化 {"event":"IE_StatusTextChange","data":{"Status":""}} Status状态文字描述 8) IE_TitleChange 标题变化 {"event":"IE_TitleChange","data":{"Title":""}} Title 标题 9) IE_WindowClosing 窗口关闭 {"event":"IE_WindowClosing","data":{"ChildWindow":0}} ChildWindow是否子窗口 10) IE_CommandStateChange 命令状态变化 {"event":"IE_CommandStateChange","data":{"Command":0,"Enable":0}} Command命令ID,Enable是否启用 B、PluginOK支持的事件通知: 1) IE_FullScreen 小程序是否响应了热键全屏 {"event":"IE_FullScreen","data":{"FullScreen":0}} FullScreen为当前是否全屏标记 2) Wrl_AppletExit 小程序退出通知 {"event":"Wrl_AppletExit","data":{"ID":1}} 6、其它 请求参数的JSON数据包,请确保是UTF-8无签名的编码。 更多接口请求说明,请参考安装目录中的文档TestWrl.txt、SDK包中的“PluginOK开发者手册.pdf”及“PluginOK中间件安全解决方案.pdf”。 如还有疑问请直接联系客服 加微信:ZorroSoft,或加QQ群:23126938