【问题标题】:Get Session from Google Script Blank从 Google Script Blank 获取会话
【发布时间】:2019-11-25 09:54:38
【问题描述】:

我开发了一个谷歌脚本,可以在每次有人查看特定电子表格时按会话获取用户的电子邮件。但是,最近我收到了一些带有时间戳的空白电子邮件地址。这是谷歌表中的输出:

这里是谷歌脚本:

function onOpen() {
   var scriptProperties = PropertiesService.getScriptProperties();
   scriptProperties.setProperty((Session.getActiveUser().getEmail() == '' ? Session.getEffectiveUser().getEmail() : Session.getActiveUser().getEmail())+"_"+randomString(20, "aA0"),Utilities.formatDate(new Date(), "GMT+7", "M-dd-yyyy HH:mm:ss"));
}

什么可能导致这种情况?有什么解决办法吗?请帮忙。

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    getEmail() 函数在某些情况下可能返回null,如the documentation 所述:

    电子邮件地址可用的情况各不相同:例如,用户的电子邮件地址在任何允许脚本在未经用户授权的情况下运行的上下文中都不可用,例如简单的 onOpen(e) 或 onEdit(e)触发器、Google 表格中的自定义函数或部署为“以我身份执行”的网络应用程序(即由开发人员而非用户授权)。但是,如果开发者自己运行脚本或与用户属于同一个 G Suite 域,则这些限制通常不适用。

    如果是这样,您在代码中使用的三元表达式:

    Session.getActiveUser().getEmail() == '' ? Session.getEffectiveUser().getEmail() : Session.getActiveUser().getEmail()
    

    将评估“假”语句(冒号后面的那个),即Session.getActiveUser().getEmail(),因为null != ''

    为了得到更好的结果,我建议你修改你的三元表达式如下(注意使用条件的变化):

    Session.getActiveUser().getEmail() ? Session.getEffectiveUser().getEmail() : Session.getActiveUser().getEmail()
    

    现在,当getEmail() 返回false 时,有效用户的电子邮件将是您的表达式返回的电子邮件。

    【讨论】:

    • 感谢您的回答。顺便说一句,还有其他替代方法可以记录电子表格查看者的电子邮件地址吗?
    • 你好@HafizHanifi,遗憾的是,没有其他方法可以可靠地获取用户的电子邮件地址。这是由于 Google 严格的隐私和安全政策。如果您必须获取用户的电子邮件,您可以考虑使用prompt() 显示一个用户可以输入的对话框。
    猜你喜欢
    • 2014-09-04
    • 2020-11-04
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    相关资源
    最近更新 更多