You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CEP/JavaScript检测Photoshop文档关闭事件

Photoshop扩展文档关闭行为检测实现方案

Photoshop原生ExtendScript DOM层没有直接暴露beforeClose事件,你写的app.addEventListener('beforeClose', detectClose)写法默认不生效,不需要用定时器轮询文档列表,以下是可直接落地的无性能损耗方案:


方案1:CEP架构扩展(兼容PS CC及以上所有版本)

CEP扩展可以直接通过宿主事件通道监听文档生命周期事件,不需要轮询:

  • 面板前端侧通过CSInterface注册事件监听,关闭前触发对应documentBeforeClose事件,关闭完成触发documentAfterClose事件,示例代码:
// CEP面板前端逻辑
const csInterface = new CSInterface();
// 监听文档关闭前事件
csInterface.addEventListener("documentBeforeClose", (event) => {
  // event.data携带当前即将关闭的文档元信息,包含文档ID、名称、路径等
  const currentDoc = JSON.parse(event.data);
  // 在这里执行服务端上报逻辑
  reportToServer(currentDoc);
});
  • 如果逻辑需要写在ExtendScript侧,可以通过Notifier对象注册四字符事件触发,文档关闭对应的四字符事件码为Cls (末尾带半角空格,固定4位长度),注册后关闭操作会自动触发指定处理脚本:
// ExtendScript侧逻辑
const closeNotifier = app.notifiers.add(
  "Cls ", 
  new File("~/your-ext-path/handler/closeReport.jsx")
);
// closeReport.jsx内写上报逻辑即可,触发时会自动拿到当前操作的文档对象

方案2:UXP架构扩展(适用于PS 2021及以上新版本)

如果是基于新版UXP框架开发的扩展,PS已经原生暴露了文档生命周期事件,直接注册监听即可:

// UXP扩展入口逻辑
const psApp = require('photoshop').app;
psApp.on('beforeDocumentClose', async (event) => {
  const closingDoc = event.document;
  // 执行上报逻辑
  await uploadCloseInfo(closingDoc);
});

注意事项

  • 定时器轮询文档列表的方案仅建议作为CS6及更早老旧版本的兜底方案,新版本下优先使用上述事件监听方案,无额外性能开销,也不会出现漏报、延迟问题。
  • 所有监听方案都无法覆盖程序崩溃、强制杀进程、系统断电这类非正常退出场景,这类场景需要做会话兜底:扩展启动时校验上次会话的关闭标记,如果没有正常关闭标记则补报异常退出日志。

内容的提问来源于stack exchange,提问作者Fitspade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:15:37