
在 google apps script 的 html 模态对话框中,因语法错误(如箭头函数书写不规范)导致 js 函数未被正确解析和定义,从而触发“function not defined”报错。修复该语法问题即可恢复事件绑定与脚本执行。
在 Apps Script 的客户端 HTML 中,JavaScript 代码需被浏览器完整解析后,才能响应 onchange、onclick 等内联事件。你遇到的 addRemoveCal is not defined 错误,表面是函数未声明,实则根源在于 HTML 解析提前中断——浏览器在加载
关键问题定位在 TemplateSelectJS.html 中的 runFunctionList() 函数:
function runFunctionList(){
functionList.forEach(func = >google.script.run.func()); // ❌ 错误:箭头函数含非法空格
google.script.host.close();
}此处 func = > 是非法语法(ECMAScript 不允许 = 和 > 之间存在空格),浏览器解析失败并抛出:
Uncaught SyntaxError: Unexpected token '>' (at userCodeAppPanel:20:33)
该错误会阻断整个
立即学习“Java免费学习笔记(深入)”;
✅ 正确写法应为标准箭头函数语法(无空格):
⚠️ 注意事项:
- google.script.run.func() 是无效写法:func 是函数引用,但 google.script.run 只支持通过字符串名调用服务端函数(如 google.script.run.makeCalendar_())。因此需改用 google.script.run[func.name]() 或更稳妥的 google.script.run[func.toString().match(/function\s+(\w+)/)[1]]();推荐直接使用 func.name(前提是服务端函数名与变量名一致且已声明为全局函数)。
- 所有被 google.script.run 调用的服务端函数(如 makeCalendar_)必须是 全局、无参数、无返回值(或仅用于触发异步流程) 的 Apps Script 函数,且需显式声明为 public(默认即 public,但不可为 private 或嵌套函数)。
- 建议将 JS 逻辑移至 或 底部,并确保 != include('TemplateSelectJS'); ?> 位于 之前(当前结构合理),避免 DOM 元素未就绪导致事件绑定失效。
总结:Apps Script HTML 中的“函数未定义”问题,90% 源于客户端 JS 语法错误引发的解析中断。务必检查控制台报错行号,优先验证箭头函数、括号匹配、分号缺失、模板字符串等常见陷阱。修复语法后,函数将正常注册,事件响应与 google.script.run 调用即可顺利执行。










