未在 Google 表单上激活 onOpen 触发器

Lua*_*ico 5 google-apps-script google-forms

只有当我打开表单进行编辑时,我的 Google 表单上的 onOpen 事件才会被激活,但当我打开它来回答 (/viewform) 时不会激活。实际上,我只是希望它在有人打开表单进行回答时运​​行,因为我的脚本使用表中的当前信息更新组合框。我不确定这是否是最好的方法,但我愿意接受建议。

我尝试创建一个函数 onOpen() 和创建一个 doIt() 函数,并在资源 > 添加触发器菜单上手动向 onOpen 添加触发器。触发器已正确列出,并且似乎可以在打开表单进行版本更新时正常工作。可能那时我得到了错误的触发器处理程序,但没有其他我想要的(只有 onEdit,它应该做 onOpen 正在做的事情,以及 onInstall)。

这方面的文档非常简洁,并且绝对专注于电子表格脚本。然而,他们提到了自定义钩子,称为可安装触发器,其中之一实际上是:

打开电子表格或表单编辑器时。(请注意,当用户打开表单进行响应时,此触发器不会激活,而是在编辑器打开表单进行修改时激活。)与简单的 onOpen 触发器不同,可安装触发器可以充当安装触发器的用户。

这表明 onOpen 应该完全按照我的意愿行事......所以现在我很困惑。

另外,我不确定权限将如何工作。目前,据我所知,似乎我与之共享表单的任何人都可以编辑它,并且每个人都可以回答它,只要此人拥有 URL。有没有办法将人们列入白名单来回答它?我不太喜欢 URL 是阻止外人查看我加载到组合框中的数据的唯一障碍,而且,最重要的是,通过提交表单来更新这些数据......似乎蛮力可以很容易地解开一个很多“秘密”表格都是这样的……或者从安全的角度来看可以吗,我只是疯了?

Ser*_*sas 4

您需要安装的触发器不是onOpen而是onFormSubmit. 显示在脚本编辑器/资源/当前脚本触发器中

见下图 在此输入图像描述

正如您所读到的(但显然不理解),onOpen触发器仅在有人打开表单编辑器时触发,而不是在有人填写(提交)表单时触发。

关于第二点,无法将允许填写表单的用户列入白名单,您所能做的就是根据使用的名称选择答案,并最终拒绝您不允许的答案。

如果此访问控制对您来说确实至关重要,您可以使用 UiApp 或 HTML 服务实现相当高效的目标,但这会更复杂一些。

关于关于权限的最后一点,事情非常简单:可安装的触发器以创建触发器的用户身份运行。如果您这样做了,那么脚本将像您手动运行一样运行,使用您的特权和访问权限。

  • 哇,太可怕了!我脑子里有整个系统的想法,强烈依赖这个功能......好吧,谢谢你的答案! (2认同)