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

Google表单Apps Script关闭prompt后出现常驻Working toast问题求助

问题:Google表单Apps Script调用ui.prompt后“Working...”提示框持续停留

问题详情

我开发了一款Google表单的简易Apps Script应用,支持将日历事件附加到表单并发送给受访者。目前遇到的问题是:通过HTML侧边栏的google.script.run调用服务器端的promptUser函数(使用FormApp.getUi().prompt或alert),关闭弹窗后,表单左下角会出现“Working...”的提示框(toast)并持续停留,直到下一个弹窗出现才会被替换。

相关截图:持续显示的“Working...”提示框

用到的promptUser函数代码:

function promptUser(message) {
  // 显示带输入框、OK按钮的弹窗,用户也可点击标题栏关闭
  let ui = FormApp.getUi();

  let response = ui.prompt(message, ui.ButtonSet.OK);

  // 处理用户响应
  if (response.getSelectedButton() == ui.Button.OK) {
    return response.getResponseText();
  } else if (response.getSelectedButton() == ui.Button.CLOSE) {
    return false;
  }
}

触发原因

google.script.run在执行服务器端函数时,默认会自动显示“Working...”的toast提示,用于告知用户脚本正在运行。但当服务器端函数中调用FormApp.getUi()的弹窗(prompt/alert)时,异步调用的状态会被弹窗打断,导致Apps Script无法正确触发toast的关闭逻辑,最终造成提示框一直停留在界面上。

解决办法

方法1:禁用google.script.run的默认提示(推荐)

调用google.script.run时添加suppressNotifications: true参数,直接关闭默认的“Working...”提示,从根源解决问题。如果需要告知用户脚本状态,可以自行在前端添加自定义提示。

修改后的前端调用示例:

// 替换原有调用逻辑
google.script.run
  .withSuccessHandler(function(response) {
    // 处理服务器返回的响应
    if (response) {
      console.log("用户输入:" + response);
    } else {
      console.log("用户关闭了弹窗");
    }
  })
  .withFailureHandler(function(error) {
    // 处理错误
    console.error("出错了:" + error.message);
  })
  .suppressNotifications(true) // 关键:禁用默认的Working提示
  .promptUser("请输入内容");

方法2:主动清除/替换提示(备选)

如果需要保留默认提示,可以在服务器端函数执行完毕后,主动调用FormApp.getUi().showToast()来替换或清除原有提示。不过这种方法可能存在延迟,不如方法1可靠。

修改后的promptUser函数示例:

function promptUser(message) {
  let ui = FormApp.getUi();
  let response = ui.prompt(message, ui.ButtonSet.OK);

  // 执行完毕后主动清除提示
  ui.showToast("", "", 0); // 空内容+0时长,相当于清除现有toast

  if (response.getSelectedButton() == ui.Button.OK) {
    return response.getResponseText();
  } else if (response.getSelectedButton() == ui.Button.CLOSE) {
    return false;
  }
}

注意事项

  • 无需被迫改用ModalDialog(除非有特殊需求),因为该方案需要自行编写HTML处理输入,流程繁琐,方法1已能完美解决问题。
  • 该问题同样存在于FormApp.getUi().alert(),解决思路完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:42:33