【问题标题】:Google Spreadsheet GAS Trigger not firing for anonymous editorsGoogle 电子表格 GAS 触发器不会为匿名编辑触发
【发布时间】:2014-12-06 16:53:15
【问题描述】:

我有一个电子表格来跟踪数据,每个知道链接的用户都可以编辑它。虽然我理解这是一个安全风险,但我不介意,因为电子表格只有我所在的公会知道和感兴趣。

还有更多特定区域受到保护,只有文档的管理员才能访问它。

我想做的是,让 GAS 为所有(匿名)用户响应“onEdit”。

最简单的例子是这样的:

代码.gs

function onEdit(e) { Browser.msgBox('Editing...'); }

我将此附加到表格 -> 在编辑触发器上,它确实为我显示 - 因为我已登录,或者因为我是此文档的管理员。但是:其他(匿名)用户由于某种原因没有收到消息框。我已经通读了权限表,它指出,如果你想使用任何类型的脚本,显然你必须登录(除了那些时间驱动的脚本,它们是以添加它们的那个人的名义执行的)。

没有解决方法吗?我的触发器只是将值从一个表复制到另一个表,对它们进行排序和格式化。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    实际上有 2 个 onEdit 触发器,“简单”一个和“可安装”一个。

    simple onEdit 在用户访问电子表格时运行而不要求任何授权,这意味着它无法执行任何需要授权的操作并使用 SpreadsheetApp 方法需要授权(正如您在第一次自己运行该脚本时注意到的那样)。

    可安装触发器(onEdit、onChange等)以脚本作者的身份运行,更准确地说,它们以安装用户的身份运行触发器。

    它们(被触发的函数)拥有与用户自己相同的“权利”,可以做用户能做的一切。

    使用电子表格的匿名(未登录)用户将触发此脚本,但他们不会对该脚本的作用负责,并且一切都将以触发器“安装程序”的名义完成。

    请随意尝试this spreadsheet 我写这个脚本的地方:

    function onEdit(e) {
      SpreadsheetApp.getActiveRange().setValue('simple onEdit Trigger running as sheet user without authorization');
    }
    
    function onEditInstallable(e) { 
      SpreadsheetApp.getActiveRange().setValue('Installable onEdit Trigger running as script author');
    }
    

    请在您尝试并在不安装任何特殊触发器的情况下测试该副本后制作一份副本。

    然后比较结果:在我的工作表中,您将获得来自第二个函数的消息,而在您的工作表中,它将是来自第一个函数的消息。

    当可安装的触发器处于活动状态并且编辑工作表时,这两个功能都将被触发,并且您实际上有可能连续看到这两个文本,因为它们通常不会花费完全相同的时间跑步。

    如果您在工作表中安装调用onEditInstallable 函数onEdit 的触发器,匿名用户将始终看到第二个(从脚本编辑器转到资源/当前项目触发器/创建新触发器并选择您需要的触发器)

    关于该主题的文档:simple triggersinstallable ones

    【讨论】:

    • 谢谢。我实际上阅读了有关可安装触发器的信息,但由于某种原因,我不知道有一个“onEditInstallable”函数可以使用。我想 e.Auth 可能会产生足够的关于用户的信息来区分授权用户和匿名用户?感谢您付出努力并创建该示例电子表格。
    • 演示电子表格需要请求访问权限。我认为应该与知道链接的任何人共享它。
    • 它最初是,但人们一直在发送垃圾邮件并更改代码中的所有内容,因此我不得不关闭访问权限。现在我已将其设置为只读,因此任何人都可以轻松制作副本。
    猜你喜欢
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多