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

FigJam自定义Widget:属性菜单触发figma.showUI弹窗异常求助

解决FigJam自定义Widget弹窗一闪即逝的问题

问题核心是属性菜单的事件处理器默认同步执行,函数跑完后Widget进程直接终止,但figma.showUI是异步初始化操作,还没完成就被中断,导致弹窗一闪而逝。按报错提示,让事件处理器返回Promise就能解决。

具体修改方案

方法1:用async/await简化实现

把事件处理函数改成async函数,用await等待figma.showUI完成初始化:

figma.on('run', async ({ command }) => {
  if (command === 'Open Settings') {
    // 等待UI弹窗加载完成
    await figma.showUI(__html__, { width: 300, height: 250 });
    
    // 如需和UI交互,比如接收消息,可在这里添加逻辑
    figma.ui.onmessage = (msg) => {
      if (msg.type === 'close-settings') {
        figma.ui.close();
      }
    };
  }
});

方法2:手动返回Promise

如果不想用async/await,也可以直接返回Promise,让Figma等待异步操作结束:

figma.on('run', ({ command }) => {
  if (command === 'Open Settings') {
    return new Promise((resolve) => {
      figma.showUI(__html__, { width: 300, height: 250 });
      
      // 监听UI关闭事件,用户关闭弹窗后再结束Widget进程
      figma.ui.on('close', () => {
        resolve();
      });
    });
  }
});

原理说明

Figma的Widget命令处理器默认是同步模式,函数执行完毕后立刻终止Widget后台进程。而figma.showUI需要时间加载iframe内容,返回Promise(或用async/await)会告诉Figma:"等这个异步操作完成再终止进程",确保UI弹窗能正常显示并和用户交互。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:29:57