Apps Script HTML模板按钮点击无法触发Classroom API调用
问题根因
Classroom.Invitations.create是Apps Script服务端专属API,只能在.gs后缀的服务端脚本中运行,前端HTML内嵌的JS上下文里不存在Classroom全局对象,直接调用只会抛出未定义错误。- 你当前的HTML文件中没有定义按钮绑定的
sendTeacher函数,onClick触发时找不到对应执行逻辑,自然没有任何响应。 - 你之前写的
clickBtn逻辑存在语法缺失:script标签未闭合、函数没有和按钮做绑定,就算写了也跑不起来。
修复方案
1. 编写服务端逻辑
打开项目内的.gs服务端脚本文件,添加Classroom API调用逻辑,所有涉及官方服务的操作全部放在服务端执行:
// 服务端执行的教师邀请发送逻辑 function sendTeacherToClass(courseId, userEmail) { try { const createRes = Classroom.Invitations.create({ "courseId": courseId, "userId": userEmail, "role": "TEACHER" }); return {status: "success", data: createRes}; } catch (err) { return {status: "fail", msg: err.message}; } } // 原有HTML渲染、include逻辑保留即可 function doGet() { return HtmlService.createHtmlOutputFromFile('index'); } function include(filename) { return HtmlService.createHtmlOutputFromFile(filename).getContent(); }
2. 修改前端HTML模板
替换原有index.html内容,前端通过google.script.run异步调用服务端函数,不要在前端直接调用Classroom API:
<!DOCTYPE html> <html> <head> <base target="_top"> <?!= include('sideBarInsertStyle') ?> <?!= include('sideBarInsertSelect') ?> </head> <body> <!-- 补全你之前用到的输入控件 --> <label>课程ID:</label> <input type="text" id="class" placeholder="输入对应课程ID"><br> <label>教师邮箱:</label> <input type="text" id="txt_Email" placeholder="输入待邀请教师邮箱"><br> <div id="classEmail"></div> <input type="button" onClick="handleSendClick()" value="Submit" /><br> <script> function handleSendClick() { const classEmails = document.getElementById("txt_Email").value.trim(); const classID = document.getElementById("class").value.trim(); if (!classEmails || !classID) { alert("请填写完整课程ID和教师邮箱"); return; } document.getElementById("classEmail").innerHTML = classEmails + ": E-mail a ser inserido"; // 异步调用服务端函数 google.script.run .withSuccessHandler(res => { if (res.status === "success") { alert("教师邀请发送成功"); } else { alert("发送失败:" + res.msg); } }) .withFailureHandler(err => { alert("请求异常:" + err.message) }) .sendTeacherToClass(classID, classEmails); } </script> </body> </html>
注意事项
- 首次运行时会弹出授权提示,需按指引给项目授予Google Classroom操作权限,否则API会返回权限不足错误。
- 提前在Apps Script编辑器左侧「服务」菜单中添加Google Classroom API,否则服务端脚本无法识别
Classroom对象。 - 所有涉及Google官方服务调用、账号数据读写的逻辑必须放在服务端
.gs文件中,前端仅能通过google.script.run触发服务端逻辑,无权直接访问这类服务端接口。
内容的提问来源于stack exchange,提问作者William Omar Gibram
相关产品推荐
相关产品推荐

