Javascript 如何获取所有表单触发器(不仅仅是当前脚本)?
我做了以下工作:Javascript 如何获取所有表单触发器(不仅仅是当前脚本)?,javascript,google-apps-script,google-forms,Javascript,Google Apps Script,Google Forms,我做了以下工作: var form = FormApp.openById("ABC"); ScriptApp.newTrigger("testFunctionSheet1").forForm(form).onFormSubmit().create(); 创建谷歌表单(例如表单ID=ABC) 创建了一个谷歌表单(我们称之为sheet1) 在sheet1的脚本编辑器中,使用以下代码将触发器安装到我的表单中: var form = FormApp.openById("ABC"); ScriptApp
var form = FormApp.openById("ABC");
ScriptApp.newTrigger("testFunctionSheet1").forForm(form).onFormSubmit().create();
var form = FormApp.openById("ABC");
ScriptApp.newTrigger("testFunctionSheet1").forForm(form).onFormSubmit().create();
当我调用以下命令时,我看到触发器已正确安装:
ScriptApp.getUserTriggers(form);
一切都很好。每当提交Google表单时,我都可以执行代码
问题是,稍后我会继续创建一个新的Google表单(我们称之为sheet2),它有类似的代码:
ScriptApp.newTrigger("testFunctionSheet2").forForm(form).onFormSubmit().create();
不过,为了安全起见,我尝试从所有旧脚本(即sheet1)中删除所有以前的触发器。但是,当我跑步时:
ScriptApp.getUserTriggers(form);
。。。它返回一个结果(testFunctionSheet2
),而不是同时返回testFunctionSheet1
和testFunctionSheet2
。原来它只返回当前脚本执行的触发器
这是有问题的,因为这可能意味着我无意中有许多脚本都在表单提交时执行。如果我从来没有写下哪些脚本为哪些表单执行,我就不知道每次提交都会运行什么。这些脚本中的一些可能做相同的事情(充其量是浪费CPU周期,或者在最坏的情况下会相互干扰),或者它们可能做完全不同的事情,并可能相互冲突
我想要一种简单的方法来查找表单提交时将执行的所有脚本触发器。类似于如果函数的行为与我预期的一样
例如,ScriptApp.getUserTriggers(表单)
应返回如下内容:
:sheet1
testFunctionSheet1
:sheet2
testFunctionSheet2
更新:的文档说明它将永远不会返回不同脚本的触发器: 获取此用户在给定表单中拥有的所有可安装触发器,仅用于此脚本或加载项。无法使用此方法查看附加到其他脚本的触发器
那么,我如何知道与给定Google表单相关联的所有触发器呢?注意:这不一定是一个编程解决方案。如果表单中有一个UI元素为我提供了这些信息,那也就足够了。似乎没有办法做到这一点,但有一些变通方法可以使事情更有条理:
此脚本有一个与sheet1关联的活动触发器。
您可以创建一个帮助函数,在安装触发器之前,它可以确保该文本不存在(例如,如果您想将每个表单限制为1个触发器)正如OP在这个问题上已经提到的,文档中说脚本不能获得由其他脚本创建的触发器 如果您是唯一一个从脚本项目创建触发器的人,那么请转到>触发器,在那里您将找到由您的帐户创建的所有触发器的列表 我还没有尝试过,但我认为另一种选择是在创建触发器的项目上启用Google Apps脚本API,并添加一个通过Google Apps脚本API调用的函数来“记录”该项目创建的触发器 关于“在某处登录”,可能更简单的设置是将日志通过电子邮件发送给“活动用户”。转到
这应该给出一个id为ABC的
表单
中所有触发器的列表。您可以清除那里的过滤器并添加新的过滤器。这与我正在寻找的非常接近,但它似乎只适用于我安装的触发器。理想情况下,如果其他人运行了在表单上安装触发器的代码,我也应该能够在列表中看到他们的触发器。@senseal您不能看到其他人的触发器。它打开了安全漏洞,利用它很容易。触发器与文档不完全关联。它更多地链接到用户帐户,而不是特定的文档。