google-apps-script - onOpen 触发器未在 Google 表单上激活

标签 google-apps-script google-forms

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

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

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

When a spreadsheet or the form editor is opened. (Note that this trigger does not activate when a user opens a form to respond, but rather when an editor opens the form to modify it.) Unlike the simple trigger onOpen, the installable trigger can act as the user who installed the trigger.



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

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

最佳答案

您需要安装的触发器不是 onOpen但是一个 onFormSubmit .
显示在脚本编辑器/资源/当前脚本触发器中
见下图
enter image description here
如您所读(但显然不理解),onOpen trigger 仅在有人打开表单编辑器时触发,而不是在有人填写(提交)表单时触发。
关于第二点,没有办法将允许填写表格的用户列入白名单,您所能做的就是根据使用的名称选择答案,并最终拒绝您不允许的答案。
如果这个访问控制对你来说真的很重要,你可以使用 UiApp 或 HTML 服务来实现一些非常有效的东西,但这会有点复杂。
关于你关于权限的最后一点,事情很简单:可安装触发器以创建触发器的用户身份运行 .如果您这样做了,那么脚本将像您手动运行它一样运行,使用您的特权和访问权限。

关于google-apps-script - onOpen 触发器未在 Google 表单上激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24370438/

相关文章:

date - 如何自动删除包含从现在开始偏移过去超过 3 天的日期的行?

javascript - 尝试使用 Google Apps 脚本将图像上传到 Graph API 时如何修复 "Exception: Limit Exceeded"错误?

file-upload - Google Forms文件上传完整示例

google-apps-script - 通过 Google App Script 生成 PDF

google-apps-script - 将身份验证从一个 Google Apps 脚本网络应用程序传递到另一个 Google Apps 脚本网络应用程序

javascript - 删除 Google 表格中的重复行

javascript - 从 Google 表单中检索到响应的链接

google-apps-script - Google Forms Script ItemResponse getScore() 返回 null

google-apps-script - 如何使用 Apps 脚本获取 Google 表单目标的电子表格标签名称

javascript - Google Forms/Apps Script/Hangouts Chat - 机器人消息内容单独发送而不是一起发送