融媒共享空间 — 本机 WPS 文字加载项(最小包)
============================================
作用:网页通过 wpsjsrpcsdk → 127.0.0.1:58890 调用本方法,在 WPS 内 Documents.Open(WebDAV),绕过 ksowebstartupwps 对第三方 URL 的拦截。
与官方 §1.5「业务系统集成」对齐(默认)
--------------------------------------
• 页面会输出 **jsplugins.xml** 的完整 URL(`/public/wps-addon-sharespace/jsplugins.xml`),唤起时走 **WpsClient + jsPluginsXml**(**wps_sharespace_plugins_mode = 2**)。
• 加载项入口为 **dispatcher**,参数仍为 `{ url: word_webdav_url }`。
• 若仅使用 Publish 且本机已装好加载项、不想动态拉 jsplugins:把 **wps_sharespace_plugins_mode** 改为 **1**。
• 反向代理/CDN 下请设置 **wps_sharespace_jsplugins_xml** 为对外的绝对地址。
• **jsplugins.xml** 与 **ribbon.xml** 须同路径可访问(文档要求 url 下 ribbon.xml 可打开)。
安装(一次)
------------
方式 A(可选,借鉴官方):浏览器打开站点上的 **cehua/install.html**,点「立即注册加载项」。
默认与官方示例一致会先 disableall 再注册;若本机还有其它 WPS 加载项,请用 **install.html?soft=1** 温和模式(不卸载全部)。
需本机 58890 可用;加载项 URL 由页面根据当前地址自动拼为 …/public/wps-addon-sharespace/。
方式 B(手工):按下列步骤编辑 publish.xml。
1. 用浏览器打开本目录下 ribbon.xml、js/main.js,确认站点 URL 可访问(url 末尾须带 /)。
2. 编辑 publish-snippet.xml 里的 url 为你的实际地址,将其中 整行复制到:
%APPDATA%\Kingsoft\wps\jsaddons\publish\publish.xml
的根节点 内(若无文件可自行建:...)。
3. 完全退出 WPS 后重新打开文字。
4. 在 cehua/config/setting.php 设置:
wps_sharespace_addon_name => 'CehuaSharespace'(与 jspluginonline 的 name 一致)
wps_sharespace_addon_func => 'dispatcher'(与官方示例一致;亦可 openSharespaceWebdav)
wps_sharespace_plugins_mode => 2(动态传递+WpsClient,默认)或 1(仅 WpsInvoke)
5. 若已能唤起 WPS 但打不开文档:
按官方 JSAPI §2.2「不落地打开」,须使用 **Documents.OpenFromUrl(url, "成功回调名", "失败回调名")**,
且 **GET 该 url 须直接返回文档流**(Content-Type、鉴权与 WebDAV/令牌与文档「下载接口要求」一致)。
本项目 js/main.js 已按三参数调用;index.html 中 main.js 带 **?v=** 便于更新后绕过缓存。
使用前(重要)
--------------
网页调 WPS 依赖本机 **wpscloudsvr** 监听 **127.0.0.1:58890**。若控制台出现 ERR_CONNECTION_REFUSED:
请先**正常启动 WPS 文字**(部分版本需登录账号或安装「办公助手/云服务」相关组件),
可在任务管理器中确认有 Kingsoft/WPS 相关进程后再点共享空间里的「WPS」。
若已出现 **58890/transfer/runParams 409 (Conflict)**:多为中继通道忙、或**短时间内重复请求**(请勿连点「WPS」)。
页面已做防连点锁,SDK 与脚本会对 409 自动多轮退避重试;仍失败时请隔几秒再点一次。
若出现 **transfer/runParams 406 (Not Acceptable)**:在 wpsjsrpcsdk 里 **406 常表示业务错误**(非浏览器「不接受内容类型」),响应体里多为英文短句,请对照处理:
• **Failed to send message to WPS** — WPS 进程未就绪或通道异常;先打开 WPS 文字再试。SDK 已对该文案做有限次自动重试。
• **Json parse failed** — 传参 JSON 异常(极少见);可升级 WPS / wpsjs-rpc-sdk,或检查是否用错 Invoke 参数。
• **Product not found** — 未装对应组件或类型不对;请用 **WPS 文字**,并确认 config 里加载项名为本机已注册的 **CehuaSharespace**。
• **Failed** — 通用失败;可看 WPS 是否弹错、或与其它 403/503 一并查官方「问题排查手册」。
在开发者工具 Network 中点开该请求,查看 **Response 正文** 可区分上述哪一种。
transfer/runParams 请求体说明(排查 Failed to send message to WPS)
------------------------------------------------------------------
• **data** 里 `ksowebstartupwps://` 后为一段 Base64,解码后是 JSON:含 **name**(加载项名)、**function**(拼好的 JS 片段)、**info**(含 url 与回传 transferEcho 的代码)。这是 SDK 正常形态,不是乱码。
• 返回 **`{ data: "Failed to send message to WPS." }`**:58890 已收到 HTTP,但 **没有把指令投递到 WPS 文字进程**(进程间通信失败),常见原因:
1) **未先打开 WPS 文字**,或只开了表格/演示;
2) **加载项未真正加载**(功能区无「融媒共享」、调试器里无本脚本);请先访问 install.html 或 publish.xml 装好 **CehuaSharespace**;
3) **入口函数不在宿主全局**:请使用最新 **main.js**(已将 openSharespaceWebdav / OpenFromUrl 回调 / dispatcher 挂到 **globalThis**);
4) 仍不行时把 **wps_sharespace_addon_func** 改为 **dispatcher** 试 OA 同款入口;
5) 杀软拦截、wpscloudsvr 异常:可结束 Kingsoft 相关进程后先开 **WPS 文字** 再点网页「WPS」;oem.ini 中 **InstallJsapiService=1** 可保证中继自启(见官方附录)。
若 https 业务页无法连 58890,请用 http 访问后台测试,或按金山文档改用 WebSocket 等。
调试报错排查
--------------
• 「ribbon functions should return bool or string」:功能区里 onLoad / getEnabled 等回调不能返回 undefined。
本项目 js/main.js 里 ribbon.OnAddinLoad / OnAction 已改为 return true;改后需让 WPS 重新拉取在线加载项(或清缓存)。
• 「Main resource content verification failed … index.html」:多为 **index.html 响应不是稳定、可校验的静态页**。
请用浏览器无痕直接打开该 URL,须 **HTTP 200**、勿跳登录/404;勿经 PHP 动态输出;建议 **UTF-8 无 BOM**。
若站点 http 自动跳 https,请保证证书有效且 WPS 内嵌浏览器能访问。