响应企业安全、效率需求,屏蔽、禁用、拦截、扩展云文档的导入导出等操作。
如何屏蔽\禁用\拦截\扩展文件操作项?
本定制方案仅适用于私有化WPS365版本
1. 方案概述
文档中心里,这些“新建”“导入”“上传”“导出”“分享”等按钮,都是文件操作项,企业用户可以使用这些按钮操作文件。
![]() | ![]() | ![]() | ![]() |
|---|
有些企业可能出于安全、效率等需求,希望屏蔽\禁用、拦截、扩展部分文件操作项。
| 屏蔽\禁用 | 指的是企业担心文档泄漏,希望完全禁止企业用户下载文档,想屏蔽\禁用WPS文档中心的下载按钮。屏蔽:指“操作项完全不可见”禁用:指“操作项可见,但点击后不生效”。 |
| 拦截 | 指的是企业希望下级部门无法访问机密文档,希望WPS文档中心在企业用户打开文档前,先验证企业用户身分是否符合要求,如不符要求,就拦截企业用户的下载请求。(本文仅涉及“拦截”定制,权限验证的定制另有教学文档撰写中,敬请期待) |
| 扩展 | 有些企业希望提升员工的文件操作效率,想把第三方应用入口集成至文件操作项的菜单,方便企业用户快速选中。 |
我们可以使用文档中心Web端(PC端)、H5端(移动端)的开放能力,定制文件操作项:
| 实现方式&效果 | 屏蔽禁用 | 点击999(1).txt后没有出现跳转,说明该操作已被禁用 |
| 拦截 | 可在原有操作逻辑中插入一段开发者自定义的逻辑,如匹配权限或者插入审批后才能执行某操作。 拦截了收藏、分享等文件操作项 | |
| 扩展 | ![]() 在文档操作项菜单里,增加了“Demo示例”按钮在左上角菜单里,增加了“Demo示例”按钮 | |
| 依赖版本 | 每个位置的操作项定制,依赖的版本略有不同,操作流程里会有详细解说。但只要版本大于23-11a(含),即可实现本文提到的所有定制功能。 | |
| 依赖操作系统 | 支持X86、XC | |
2. 使用指南
👉定制范围总览
| 产品端 | 适用场景说明 |
| 云文档PC | 对文件右键操作、更多操作提供拦截、扩展、屏蔽/禁用能力扩展适用于扩展新功能场景,如导出为、文件归档等屏蔽适用于如“下载”等场景拦截适用于在原有操作逻辑中插入一段客户自定义的逻辑,如匹配权限或者插入审批后才能执行某操作 |
| 云文档H5 | 分享权限页面过滤菜单,文件列表更多面板菜单,文件点击拦截,新建面板扩展。适用场景同上 |
👉云文档PC端(Web端)可定制项
云文档PC端,可定制菜单功能的入口如下:
| 定制功能 | 功能效果 |
| 右键空白处菜单 | ![]() |
| 右键文件菜单、文件右侧更多菜单 | ![]() ![]() |
| 新建文件扩展、点击拦截 | ![]() |
| 文件打开拦截 | ![]() |
| 文件操作拦截 | ![]() |
| 顶部操作项扩展、点击拦截 | ![]() |
右键空白处菜单
能力:
| 功能 | 能力 | 适用版本 | 是否支持多插件 | 是否支持异步 |
|---|---|---|---|---|
| 修改 | sdk.kdrive.fileList.empty.rightMenu.onChange | 2023-0530 | 是 | 否 |
| 点击拦截 | sdk.kdrive.fileList.empty.rightMenu.onClick | 2023-0309 | 是 | 否 |
使用方法:
// 空白处右键新增过滤
sdk.kdrive.fileList.empty.rightMenu.onChange((data)=>{
// 移除菜单,参数为要删除位置的索引
data.menuList.remove(1);
// 移除子菜单,第一个参数为父菜单的索引,第二个参数为子菜单的索引
data.menuList.items()[0].children.remove(0);
// 添加菜单,add方法第二个参数代表你要插入位置的索引
data.menuList.add({ key: "demo", name: "DEMO示例" }, 1);
})
// 空白处右键拦截,包括子菜单
sdk.kdrive.fileList.empty.rightMenu.onClick((data)=>{
// 此处可用data进行操作
console.log(data);
// return true拦截原有操作项,false则会调用原有逻辑
return true;
})
📌 注意
新建和上传文件夹中的分割符也是一个菜单项。 多个插件进行菜单修改时,由于目前仅能确保预装插件先于非预装插件加载,而预装插件和非预装插件内部加载顺序不固定,所加菜单项位置可能不同。
效果:

文件右侧更多菜单
右键文件菜单和文件右侧更多菜单共用同一个菜单列表,也是同一个能力
能力:
| 功能 | 能力 | 适用版本 | 是否支持多插件 | 是否支持异步 |
|---|---|---|---|---|
| 修改 | sdk.kdrive.fileList.rightMenu.onChange | 2023-0309 | 是 | 否 |
| 点击拦截 | sdk.kdrive.fileList.rightMenu.onClick | 2023-0309 | 是 | 是 |
使用方法:
// 右键菜单扩展事件
sdk.kdrive.fileList.rightMenu.onChange((data)=>{
// 移除菜单,参数为要删除位置的索引
data.operationList.remove(1);
// 添加菜单,add方法第二个参数代表你要插入位置的索引,name也可以使用dom元素
data.operationList.add({ key: "demo", name: "DEMO示例" }, 1);
})
// 右键菜单点击拦截
sdk.kdrive.fileList.rightMenu.onClick((data)=>{
console.log(data);
// return true拦截原有操作项,false则会调用原有逻辑
return true;
})
📌 注意
分割符也是一个菜单项。 多个插件进行菜单修改时,由于目前仅能确保预装插件先于非预装插件加载,而预装插件和非预装插件内部加载顺序不固定,所加菜单项位置可能不同。
效果:

新建文件扩展
云文档pc侧边栏新建文件点击拦截、扩展
能力:
| 功能 | 能力 | 适用版本 | 是否支持多插件 | 是否支持异步 |
|---|---|---|---|---|
| 点击拦截 | sdk.kdrive.aside.createFile.createPanel.onClick | 2023-0412 | 是 | 否 |
| 修改 | sdk.kdrive.aside.createFile.createPanel.onChange | 2023-0412 | 是 | 否 |
使用方法:
// 云文档pc侧边栏新建文件拦截
sdk.kdrive.aside.createFile.createPanel.onClick((data) => {
console.log(data);
// return true拦截原有操作项,false则会调用原有逻辑
return true;
});
// 云文档pc侧边栏新建文件扩展
sdk.kdrive.aside.createFile.createPanel.onChange((data) => {
// icon为dom元素
data.createMenuList.items()[0].subList.add({ key: "demo", name: "DEMO示例", icon: <img src={cryptoPng} alt="" /> });
});
📌 注意
由于插件内部无法对其余使用点击拦截埋点的插件的点击逻辑进行拦截,例如当上架了模板库应用时,即使返回true拦截点击逻辑,也会存在点击创建文字等类型文件仍然弹出模板库页面的情况
效果:

云文档文件列表上方新建操作点击拦截、扩展
能力:
| 功能 | 能力 | 适用版本 |
|---|---|---|
| 加载 | sdk.kdrive.fileListTopMenu.createMenu.onMounted | 2023-1109 |
| 点击拦截 | sdk.kdrive.fileListTopMenu.createMenu.onClick | 2023-0412 |
| 添加 | sdk.kdrive.fileListTopMenu.uploadMenu.onAdded | 2023-0412 |
| 隐藏 | sdk.kdrive.fileListTopMenu.uploadMenu.hide | 2023-0412 |
使用方法:
// 上传面板屏蔽
sdk.kdrive.fileListTopMenu.uploadMenu.onAdded(() => {
// 隐藏上传面板
sdk.kdrive.fileListTopMenu.uploadMenu.hide();
});
// 新增面板扩展
sdk.kdrive.fileListTopMenu.createMenu.onMounted((data) => {
// 仅添加一次
if (~data.menuList.items().findIndex((item) => item.name === "DEMO示例")) return;
// name可以用dom元素
data.menuList.add({ name: "DEMO示例", key: "demo" });
// 移除菜单
data.menuList.remove(1);
// 可以按照对应格式批量修改
// data.setMenuList(data.menuList.items());
});
// 新增面板菜单点击拦截
sdk.kdrive.fileListTopMenu.createMenu.onClick((data) => {
console.log(data);
// return true拦截原有操作项,false则会调用原有逻辑
return true;
});
效果:

文件打开拦截
能力:
| 功能 | 能力 | 适用版本 | 是否支持多插件 | 是否支持异步 |
|---|---|---|---|---|
| 点击拦截 | sdk.kdrive.fileList.file.onClick | 2023-0511 | 是 | 否 |
使用方法:
sdk.kdrive.fileList.file.onClick((data)=>{
console.log(data)
// return true拦截原有操作项,false则会调用原有逻辑
return true
})
📌 注意
影响范围较大,最近、星标、共享、我的文档、我的团队、团队文档、回收站、搜索、常用等位置的文件列表的文件点击事件均会拦截。
效果:

文件操作拦截
包括星标、分享等功能的点击拦截
能力:
| 功能 | 能力 | 适用版本 | 是否支持多插件 | 是否支持异步 |
|---|---|---|---|---|
| 点击拦截 | sdk.kdrive.fileList.star.onClick | 2023-0412 | 是 | 是 |
| 点击拦截 | sdk.kdrive.fileList.file.share.onClick | 2023-0720 | 是 | 是 |
使用方法:
// 文件列表星标点击拦截
sdk.kdrive.fileList.star.onClick((data) => {
console.info(data, "star");
// return true拦截原有操作项,false则会调用原有逻辑
return true;
});
// 文件列表分享点击拦截
sdk.kdrive.fileList.file.share.onClick((data) => {
console.info(data, "share");
// return true拦截原有操作项,false则会调用原有逻辑
return true;
});
效果:

文件选中顶部操作项
能力:
| 功能 | 能力 | 适用版本 | 是否支持多插件 | 是否支持异步 |
|---|---|---|---|---|
| 修改 | sdk.kdrive.fileListSelectTopMenu.onChange | 2023-1109 | 是 | 否 |
| 点击 | sdk.kdrive.fileListSelectTopMenu.onClick | 2023-0511 | 是 | 是 |
使用方法:
// 文件列表选中操作菜单扩展
sdk.kdrive.fileListSelectTopMenu.onChange((data)=>{
// 过滤下载按钮
const index = data.operateList.items().findIndex((item) => item.text === "下载");
data.operateList.remove(index);
// 仅添加一次
if (~data.operateList.items().findIndex((item) => item.key === "demo")) return;
// disabled判断是否禁用
data.operateList.add({ key: "demo", text: "DEMO示例", disabled: false });
})
// 文件列表选中操作菜单点击拦截
sdk.kdrive.fileListSelectTopMenu.onClick((data)=>{
console.log(data)
// return true拦截原有操作项,false则会调用原有逻辑
return true
})
效果:

👉云文档移动端(H5端)
云文档H5端,可定制菜单功能的入口如下:
| 定制功能 | 功能效果 |
|---|---|
| 分享权限页面过滤菜单 | ![]() |
| 文件列表更多面板菜单 | ![]() |
| 文件点击拦截 | ![]() |
| 新建面板扩展 | ![]() |
分享权限页面过滤菜单
能力:
| 功能 | 能力 | 适用版本 | 是否支持多插件 | 是否支持异步 |
|---|---|---|---|---|
| 修改 | sdk.kdriveMobile.sharePermissionPage.onChange | 2023-0824 | 是 | 是 |
使用方法:
sdk.kdriveMobile.sharePermissionPage.onChange(async (data)=>{
// 移除菜单,参数为要删除位置的索引
data.permissionOptions.remove(1)
})
📌 注意
仅支持过滤,不支持添加
效果:

文件列表更多面板菜单
能力:
| 功能 | 能力 | 适用版本 | 是否支持多插件 | 是否支持异步 |
|---|---|---|---|---|
| 修改 | sdk.kdriveMobile.common.filePanel.menu.onChange | 2023-0625 | 是 | 否 |
使用方法:
sdk.kdriveMobile.common.filePanel.menu.onChange((data) => {
// 移除菜单,参数为要删除位置的索引
data.operationList.remove(1);
// 添加菜单,icon为图标src地址,add方法第二个参数代表你要插入位置的索引
data.operationList.add({ name: "DEMO示例", key: "demo", icon: cryptoPng }, 0);
});
效果:

文件点击拦截
能力:
| 功能 | 能力 | 适用版本 | 是否支持多插件 | 是否支持异步 |
|---|---|---|---|---|
| 点击拦截 | sdk.kdriveMobile.fileList.file.onClick | 2023-0810 | 是 | 否 |
使用方法:
sdk.kdriveMobile.fileList.file.onClick((data)=>{
console.log(data)
// return true拦截原有操作项,false则会调用原有逻辑
return true
})
效果:

新建面板扩展
能力:
| 功能 | 能力 | 适用版本 | 是否支持多插件 | 是否支持异步 |
|---|---|---|---|---|
| 修改 | sdk.kdriveMobile.createNewFile.panel.onChange | 2023-0530 | 是 | 否 |
使用方法:
sdk.kdriveMobile.createNewFile.panel.onChange((data) => {
// 添加菜单,icon为dom元素,add方法第二个参数代表你要插入位置的索引
data.add({ menuKey: "demo", text: "DEMO示例", icon: <img src={cryptoPng} alt="" /> }, 0);
// 移除菜单,参数为要删除位置的索引
data.remove(1);
});
📌 注意
不支持点击拦截
效果:

