wps加载项及解决http://127.0.0.1:58890/version提示ERR_CONNECTION_REFUSED

wps加载项及解决http://127.0.0.1:58890/version提示ERR_CONNECTION_REFUSED

wpsjs安装步骤

1、全局安装wpsjs,注意node版本,我的是21+
install wpsjs -g

2、创建wpsjs项目,wpsjzx是我项目的命名
wpsjs create wpsjzx

3、切换的wpsjzx目录
cd wpsjzx

4、运行项目
wpsjs debug

5、打包,生成wps-addon-build文件,可选择在线插件还是离线插件,我选的是在线
wpsjs build

6、发布部署,生成wps-addon-publish文件
wpsjs publish

wpsjs -h 可查看帮助

为在线打包搭建Express框架服务器

1、全局安装express脚手架,安装完成输入express -h显示帮助信息
npm install -g express-generator

2、创建名称为serve的Express应用
express --view=ejs serve

3、根据提示依次输入命令启动项目,浏览器打开127.0.0.1:3000或者本机ip地址访问项目

4、上传文件到serve项目

把wpsjzx里wps-addon-build和wps-addon-publish下的文件都放到serve项目的publish目录

5、更改加载项服务器地址

编辑publish.html代码,找到LoadPublishAddons函数改代码

服务器地址应改为本机ip地址:http://192.168.10.5:3000/

后续可以添加多个加载项项目、更改加载项服务器地址

6、加载项服务器部署完毕,管理加载项从浏览器打开192.168.10.5:3000/publish.html和http://192.168.10.5:3000/ribbon.xml

上面写的是部署在本地,但是当部署到服务器,遇到的问题是访问不到接口http://127.0.0.1:58890/version、http://127.0.0.1:58890/publishlist等访问本地的接口,比如`http://127.0.0.1:58890/version提示ERR_CONNECTION_REFUSED`和`not allowed to launch 'ksowpscloudsvr://start=RelayHttpServer' because a user gesture is required.`

这是因为现代浏览器(Chrome/Edge/Firefox 等)为了安全,要求从网页唤起外部应用(通过自定义协议 ksoWPSCloudSvr://)必须由"用户手势"触发------例如用户点击或按键事件。脚本在非交互上下文(页面加载时、定时器回调、XHR 回调等)直接设置 window.location 或调用 Start-Process 等会被阻止并报该错误。

正确的触发方式如下:

javascript 复制代码
<!-- 用户交互按钮:用于在浏览器中以用户手势唤起 WPS 本地服务,解决非交互唤起被阻止的问题 -->
    <div style="margin-bottom:12px;">
        <button id="startRelayBtn" style="padding:8px 12px; font-size:14px; cursor:pointer;">启动 WPS 本地服务并重试</button>
    </div>
    <script>
        // 确保按钮在用户点击时同步触发自定义协议(满足 user gesture 要求)
        (function () {
            var btn = document.getElementById('startRelayBtn');
            if (!btn) return;
            btn.addEventListener('click', function () {
                try {
                    // 立即唤起 WPS 本地服务
                    InitWpsCloudSvr();
                } catch (e) {
                    console.error('InitWpsCloudSvr 调用失败:', e);
                }
                // 给 WPS 启动并监听端口一些时间,然后重试 InitSdk()
                setTimeout(function () {
                    try {
                        InitSdk();
                    } catch (e) {
                        console.error('InitSdk 调用失败:', e);
                    }
                }, 3000);
            });
        })();
    </script>

将代码贴入到publish.html中,再触发按钮就可以解决了

这里是有整合自己踩的坑,也借鉴了这篇文章https://blog.csdn.net/huaermeier/article/details/132502705

相关推荐
wtsolutions2 天前
JSON to Excel WPS Add-in - Perfect for WPS Office Users
json·excel·wps
许同2 天前
JS-WPS 自动化办公(3)数据整理-找数据
开发语言·javascript·wps
骆驼爱记录3 天前
Python程序打包全攻略
自动化·word·excel·wps·新人首发
爱上妖精的尾巴3 天前
7-10 WPS JS宏 对象使用实例7--拆分单表到多工作簿下的多表
javascript·restful·wps·jsa
wtsolutions3 天前
WPS数据写入Word模版文档,批量生成文档
word·wps
骆驼爱记录4 天前
ExcelVBA高效自动化技巧大全
运维·自动化·wps·新人首发
小真zzz5 天前
ChatPPT与WPS AI深度产品对比:AI美化技术的全面较量
人工智能·powerpoint·wps·ppt·aippt·banana
爱上妖精的尾巴5 天前
7-9 WPS JS宏 对象使用实例6:按条件读取多表再拆成多表
前端·javascript·wps·jsa