如何将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(); }
关键说明
- 后端原代码的判断逻辑有误:
Session.getActiveUser()返回的是User对象,不是直接的邮箱字符串,必须调用.getEmail()才能和数组里的邮箱匹配。 google.script.run是异步执行的,无法像同步函数那样直接获取返回值,必须通过withSuccessHandler回调函数处理后端返回的结果。- 后端函数要保证所有分支都有返回值,否则非管理员场景会返回undefined,导致前端判断出错。
内容的提问来源于stack exchange,提问作者Rafał S.
相关产品推荐
相关产品推荐

