本文档写给“第一次接触 WPS 插件开发”的观众:从下载哪些软件开始,到把五个示例逐个安装进 WPS。
适用环境:Windows 10/11。全程不需要编译工具链、不需要证书签名、不需要联网注册(网页类元素用本地服务器发布即可)。
| 事项 | 说明 |
|---|---|
| 下载 | 官网下载 WPS 个人版安装包(.exe),或使用 WPS 专业版 |
| 版本要求 | 能运行本系列至少需要较新版本(个人版 2021 之后的 12.1.x 系列)。打开任意 .pptx,设置 → 关于 WPS 查看版本号 |
| 注意 | 不要装 Microsoft Store / 应用商店的 UWP 精简版(缺宏与加载项能力) |
| 企业定制版 | 如果所在公司版没有“宏/加载项”,需要管理员在后台开启加载项权限 |
安装后建议先双击一个 .pptx 确认正常,再继续。
- 下载 LTS 版:https://nodejs.org/
- 一路默认安装;命令行验证:
node -v
- VS Code(https://code.visualstudio.com/)——改源码、看视频讲解用。
- 不装也行,Windows 记事本能改
.html/.js,但注意保持 UTF-8 编码。
- ❌ 不需要 Visual Studio / C++ 工具链;
- ❌ 不需要申请任何开发者证书(本地离线加载项直接放目录即可被加载);
- ❌ 不需要把插件上传到应用商店(那是另一套“在线加载项”流程,本系列用离线模式)。
WPS 每次启动演示文稿时,会扫描用户目录下的注册文件:
%APPDATA%\kingsoft\wps\jsaddons\
├── publish.xml ← 注册表:声明有哪些插件
└── <NAME>_<VERSION>\ ← 插件本体文件夹(本系列每个示例一个)
├── ribbon.xml 注入到“功能区”的按钮
├── index_TaskPane.html 任务窗格页面
└── js\main.js 功能区按钮的回调(点击后打开任务窗格)
publish.xml 里一行一个插件,例如:
<?xml version="1.0" encoding="UTF-8"?>
<jsplugins>
<jsplugin name="BASIC_RECT" enable="enable_dev" url="file://" type="wpp" version="1.0"/>
</jsplugins>关键约定:
| 字段 | 说明 |
|---|---|
name / version |
与插件文件夹名严格对应:文件夹必须叫 <name>_<version> |
type |
wpp=演示、et=表格、wps=文字。本系列全部是 wpp |
enable |
enable_dev,本地开发者模式 |
也就是说:“安装一个示例” = 复制插件文件夹 + 在 publish.xml 登记一行,仅此而已。本仓库的
tools/install.ps1帮你自动完成这两步。
打开 PowerShell,进入仓库目录:
cd d:\Projects\Misc\AnyTest\ppt_plugin_tutorials安装某个示例(示例目录名见下表):
powershell -ExecutionPolicy Bypass -File .\tools\install.ps1 -Demo 01_basic_shape -Kill-Demo:01_basic_shape/02_canvas_draw/03_camera_element/04_webgl_3d/05_web_content-Kill:装完后自动结束 WPS 进程(推荐,省得你手动退托盘)
然后重新打开 WPS → 新建或打开一个 .pptx,顶部功能区会出现对应标签(如「矩形色块」),点标签里的按钮即可打开任务窗格。
五个示例可以全部装上、互不冲突,功能区会各自出现一个标签。
- 打开资源管理器,地址栏输入
%APPDATA%\kingsoft\wps回车; - 进入(或新建)
jsaddons文件夹; - 把某个示例的
addin\publish.xml内容登记进jsaddons\publish.xml:- 若目标不存在:直接复制整份文件;
- 若已存在:用文本编辑器打开,把
<jsplugin .../>那一行插到</jsplugins>之前,保留原有内容;
- 把该示例
addin\<NAME>_<VERSION>整个文件夹复制到jsaddons\下; - 完全退出 WPS(含右下角托盘图标),重开
.pptx。
检查是否装好:jsaddons 下应同时存在 publish.xml 和插件文件夹,例如:
%APPDATA%\kingsoft\wps\jsaddons\
├── publish.xml
├── BASIC_RECT_1.0\
│ ├── ribbon.xml
│ ├── index_TaskPane.html
│ ├── css\style.css
│ └── js\{main,host,core,taskpane}.js
└── CANVAS_DRAW_1.0\ ...
卸载:删除对应插件文件夹,并把 publish.xml 里它的那一行删掉即可。(WPS 会自动生成 authaddin.json 这类缓存,残留条目不影响使用,可一并手动删除对应 name 条目。)
原理(重要,视频里会反复讲):
- WPS 的网页形状不允许直接打开
file://本地文件(空白页),必须走http://127.0.0.1; - 03 摄像头用的
getUserMedia也只在 localhost/127.0.0.1 这类“安全来源”下可用。
所以先启动本仓库的静态服务器(Node 版):
# 语法:node tools/serve.js <端口> <元素目录>
node tools/serve.js 8011 .\02_canvas_draw\element没装 Node 的备选(Python 3.7+,命令行为 python 或 py -3):
python -m http.server 8011 --directory .\02_canvas_draw\element浏览器打开 http://127.0.0.1:8011/canvas.html 验证可访问后,再去插件里点“插入”。
各示例约定端口:
| 示例 | 元素目录 | 服务命令 |
|---|---|---|
| 02 画布 | 02_canvas_draw\element |
node tools/serve.js 8011 .\02_canvas_draw\element |
| 03 摄像头 | 03_camera_element\element |
node tools/serve.js 8012 .\03_camera_element\element |
| 04 3D | 04_webgl_3d\element |
node tools/serve.js 8013 .\04_webgl_3d\element |
| 05 网页内容(示例页) | 05_web_content\element |
node tools/serve.js 8005 .\05_web_content\element |
05 嵌入远端网站时不需要本地服务;只有嵌入仓库自带的
dashboard.html示例时才需要 8005。
| 目录 | 功能 | 需要服务器? | 操作 |
|---|---|---|---|
01_basic_shape |
插入矩形色块,可调颜色/透明度 | 否 | 打开 pptx → 点「矩形色块」标签 → 「插入矩形」按钮 → 调颜色实时上色 |
02_canvas_draw |
实时画布元素 | 是(8011) | 先启动服务 → 点「手绘画布」标签 → 插入画布 → 放映(F5) 后在元素里画 |
03_camera_element |
摄像头画面元素 | 是(8012) | 同上;放映后点元素内的“开启摄像头”,授权即可看到画面 |
04_webgl_3d |
WebGL 3D 元素 | 是(8013) | 同上;放映后看到旋转立方体/三维曲线动画 |
05_web_content |
插入任意网页 | 可选(8005) | 输入网址 → 选尺寸 → 插入 → 放映后点击交互 |
编辑状态下网页元素显示的是网页首帧缩略图,真正“活”起来要到放映(F5)。这是 WPS 网页形状的设计行为,不是 bug。
| 现象 | 原因与处理 |
|---|---|
| 功能区没出现示例标签 | 插件未注册成功:检查 jsaddons\publish.xml 是否 UTF-8、插件文件夹名是否严格等于 <name>_<version>、是否完全重启了 WPS(含托盘) |
| 点了按钮打开的是 Chrome/浏览器 | 插件版本过旧或路径解析失败:确认 js/main.js 顶部 PLUGIN_DIR_NAME 与插件文件夹名一致,且使用 Application.Env.GetAppDataPath() 拼绝对路径(本系列代码已内置) |
| 任务窗格打开但提示“AddWebShapeEx 不可用” | 当前 WPS 版本太旧或定制版裁掉了网页形状能力;01 不依赖该能力仍可演示,02~05 需升级 WPS 或换用网页形状可用的版本 |
| 插入后元素在编辑态是静态图 | 正常,放映后才渲染为可交互网页 |
| 元素显示空白/加载失败 | 服务没启动、端口/路径写错,或网址本身不可达;先在浏览器里打开元素 URL 验证 |
| 摄像头黑屏或被拒绝 | 必须用 http://127.0.0.1:<端口> 访问(安全来源);检查是否有摄像头、是否被系统隐私设置拦截、是否在放映状态 |
| WebGL 空白 | 检查显卡驱动/是否在远程桌面或虚拟机中(软件渲染受限);浏览器里先打开 3D 元素页验证 |
| 企业定制版没有这些能力 | 加载项/宏被管理员关闭,需联系管理员开启 |
- 每集先展示“成品效果”,再拆讲对应示例目录与代码;
- 01 讲清
publish.xml → ribbon.xml → main.js → 任务窗格 → core.js的数据流,后续所有示例共用这层认知; - 02 开始引入“本地服务 + 网页元素”双进程思维(插件管壳、网页管内容);
- 03、04 复用 02 的壳,只替换
element/*.html,正好印证“元素内容可替换”的架构; - 05 作为综合篇收尾,讲解远端内容、尺寸预设、透明度探测这些工程化细节。