WPS加载项是如何实现调用业务系统JS的 WPS通信原理

WPS加载项是如何实现调用业务系统JS的 WPS通信原理 wpssdk

写在前面:JSAPI金山办公官方群 756432763
欢迎有问题的同学进入


反正自己也不专业,我这里就用大白话解释吧 -。-

一、业务系统调用WPS原理

WPS监听服务 端口58890(http) 58891(https) 进程:wpscloudsvr.exe

  • 应用系统调用wps的SDK后,sdk把应用系统的动作封装起来 -> 访问并传参给监听服务
    该监听服务(wpscloudsvr.exe)负责调起wps。实现无弹窗调起
  • 同理,调用wps套红,水印等功能,也是该方法封装

整个流程图是这样的
流程图

下图是调用WPS加载项功能的请求 /transfer/runParam
参数data中 ksowebstartupwps://后面的base64编码,就是封装好的动作和参数
请求
那当该进程被关闭时怎么办?
请求超时,则直接将浏览器地址改为ksoWPSCloudSvr://start=RelayHttpServer(意为启动该服务)进行跳转
这个是浏览器自定义协议,由wps实现 类似Ftp:// http:// 等 是通过注册表实现的

自定义协议参考https://www.cnblogs.com/Aricc/archive/2009/03/18/1415929.html

此时监听服务已经启动,然后需要再次点击 重复上述步骤进行调用

如图 onerror里面触发打开监听服务
onerror

二、WPS调用业务系统JS的原理

点击执行业务系统函数handleOaFunc1 ,前端弹出提示框

这个功能真的是百思不得其解,可能是我太笨了(不是 >w<)功能
因为误认为这个是CS端掉起,我们打开Wireshark,发现:。。 见鬼了。
只有返回没有请求Wireshark
查了后端主动发消息给前端相关的内容,发现网上有说两种方法
一种是websocket 一种是SSE(Server-Sent Events)
在wps提供的demo里面找对应的关键词 “EventSource”/“WebSocket” -> 没收获

也许有经验的人肯定第一时间会想到,这个之前是有一个请求的(没错其实就是这样)

我们刷新Demo页面,发现有一条连接一直处于挂起状态/askwebnotify
askwebnotify
当我们点击WPS里的按钮时该连接有了返回值(返回动作和参数),到这一步就是前端处理的事情了
然后随即立刻建立起下一个/askwebnotify 请求,继续挂起,直到返回
askwebnotify
2021-7-1 更新:
这点新版本不会一直挂起了,现在的sdk方法是2秒超时,释放后再次请求。

但是当浏览器没选择该页签时,我在wps点击了多次这个执行业务系统函数handleOaFunc1 怎么办?
这里我们可以看到WPS客户端是按照消息队列进行返回的,当我们再选择页签到该页面的时候,接着收到消息,建立链接。我们的WPS依次按队列里面的动作进行返回
消息队列

End

关于这个连接我们可以使用 netstat -ano 命令看端口监听情况

发现当点击这个按钮的时候 与wps监听服务58890 新建立了一个链接
50273 -> 50344
端口1
端口2

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值