【问题标题】:onEdit can programmatically create a trigger?onEdit 可以以编程方式创建触发器吗?
【发布时间】:2012-05-24 11:18:44
【问题描述】:

我写了一个简单的脚本,试图以编程方式从 onEdit 函数创建一个脚本

function onEdit() {
  test();
}

function test() {
  triggerLater();
}

function customMsgBox() {
  Browser.msgBox("hello world");
}

function triggerLater() {
  var date = new Date();
  date.setMinutes(date.getMinutes() + 1);
  try {
    var oneTimeOnly = ScriptApp.newTrigger("customMsgBox")
      .timeBased()
      .at(date)
      .create();
    return oneTimeOnly.getUniqueId();
  }
  catch (e) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    ss.toast("error");
  }
}

如果我尝试从脚本编辑器运行 onEdit,则会创建触发器,但电子表格上的每次编辑都会在 toast

中收到“错误”消息

谁能帮我理解?

【问题讨论】:

  • 仅供参考,如果您将变量“e”中的值烘烤,您将能够看到确切的错误消息。

标签: google-apps-script google-sheets triggers


【解决方案1】:

onEdit 简单事件处理函数具有有限的权限(即它不能发送电子邮件、打开日历等)。因为它在没有用户权限的情况下运行。因此,它不能设置触发器(没有任何限制,将是一个巨大的安全漏洞)。

如果您希望在您的帐户下创建触发器,请使用可安装的编辑触发器。首先,将您的 onEdit 函数重命名为其他名称(因此它不会作为简单的事件处理程序触发),然后转到“资源”菜单并选择要在电子表格编辑事件上运行的函数。查看docs 了解更多信息。

【讨论】:

  • 没有关于触发器创建的具体信息。但是关于简单事件处理程序的第三个要点说,不需要用户授权的任何事情都可以做,包括它。很明显,您不应该能够从有限的代码中触发特权代码。这将是一个巨大的安全问题。
  • 安全页面 developers.google.com/apps-script/guide_security 上有特定信息,其中显示“简单事件,如 onOpen、onEdit 和 onInstall 以操作电子表格的用户身份执行。可安装事件(电子表格触发器)以创建触发器的用户身份执行。”
猜你喜欢
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 2010-12-18
相关资源
最近更新 更多