如何在Google Apps Script中监听Google Forms的“Response not Found”事件?
解决方案
你无法在Google Apps Script的服务端运行环境中监听浏览器前端的弹窗事件,换个思路直接通过Google Forms官方接口提前校验回复是否存在,不需要跳转到前端页面再做判断。
具体实现步骤
- 先从你持有的编辑URL中提取两个核心参数:表单ID(
d/和下一个/之间的字符串)、回复ID(#response=后面的字符串) - 在Google Apps Script中启用Form服务,通过表单ID打开对应表单实例
- 调用接口尝试获取目标回复,若抛出指定异常则说明回复不存在,直接触发你需要的自定义操作即可
示例代码
function checkResponseExist(targetUrl) { // 提取表单ID const formId = targetUrl.match(/d\/([^/]+)\//)[1]; // 提取回复ID const responseId = targetUrl.match(/response=([^&]+)/)[1]; try { const form = FormApp.openById(formId); // 尝试获取对应回复,不存在会直接抛出错误 const targetResponse = form.getResponse(responseId); // 回复存在时的自定义逻辑写在这里 return true; } catch (err) { if (err.message.includes('Response not found')) { // 回复不存在时的自定义操作写在这里,比如弹出警告、发通知邮件、写日志等 // 如果是在有UI的上下文(比如绑定表格/文档的脚本)可以直接弹提示 SpreadsheetApp.getUi().alert('目标回复不存在'); return false; } // 其他权限、参数错误的处理逻辑 throw err; } }
注意事项
- 如果脚本是在无UI的环境运行(比如定时触发器),把弹出警告的代码替换为你需要的其他操作即可
- 运行前需要给脚本授权表单的访问权限,确保脚本所属账号有目标表单的编辑权限
内容的提问来源于stack exchange,提问作者Miguel Prytoluk
相关产品推荐
相关产品推荐

