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

如何将Code.gs中的CheckifAdmin函数结果用于JavaScript条件判断?

问题解决方法

你的核心问题出在google.script.run是异步操作,而且前端代码里直接调用CheckifAdmin()是在找前端的同名函数,根本没用到后端Code.gs里的逻辑。另外后端的CheckifAdmin函数如果用户不在管理员列表里,没有返回值,会默认返回undefined,得补上默认返回。

修改后的Code.gs

function CheckifAdmin() {
    var admins = ['email@domain.com'];
    for (var i = 0; i < admins.length; i++) {
        // Session.getActiveUser()返回User对象,需调用.getEmail()获取字符串邮箱
        if (admins[i] == Session.getActiveUser().getEmail()) { 
            return true;
        }
    }
    return false; // 非管理员时明确返回false
}

修改后的前端JavaScript

function ChangeEmail() {
    // 用withSuccessHandler接收后端异步返回的结果
    google.script.run
        .withSuccessHandler(function(isAdmin) {
            if (isAdmin) {
                var newemail = prompt("Please enter new email");
                document.getElementById('form_email').value = newemail;
            } else {
                alert("You do not have needed permissions.");
            }
        })
        .CheckifAdmin();
}

关键说明

  1. 后端原代码的判断逻辑有误:Session.getActiveUser()返回的是User对象,不是直接的邮箱字符串,必须调用.getEmail()才能和数组里的邮箱匹配。
  2. google.script.run是异步执行的,无法像同步函数那样直接获取返回值,必须通过withSuccessHandler回调函数处理后端返回的结果。
  3. 后端函数要保证所有分支都有返回值,否则非管理员场景会返回undefined,导致前端判断出错。

内容的提问来源于stack exchange,提问作者Rafał S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:36:10