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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:07:04