来自Google:
如果为当前用户安装了某个附件或在当前文档中启用了该附件,则该附件将被加载到文档中,从而使其显示在“附件”菜单中并开始侦听简单的触发器onInstall(e),onOpen(e)和onEdit(e)
运行onOpen简单触发器时,身份验证模式最多为 LIMITED ,这意味着在尝试检查用户安装的触发器时会出现以下错误:
您无权调用ScriptApp.getUserTriggers。所需权限:https://www.googleapis.com/auth/script.scriptapp
因此,我们可以创建一个菜单项,上面写着“创建触发器”,用户可以在其中单击,然后我们将进入 Full 身份验证模式。唯一的问题是,如果触发器已经存在,那么如果“创建触发器”菜单选项没有不出现,那将是理想的。
Google似乎在其文档中暗示了一种可能的解决方案,即在创建已安装的触发器时设置属性。然后,仅在已设置属性的情况下,简单的onOpen触发器才可以创建“创建触发器”菜单选项。但是,用户可能不小心清除了属性而意外地手动删除了已安装的触发器,这将阻止用户再次看到“创建触发器”菜单选项-严重损坏的状态。
另一种可能的解决方案是创建一个附加的已安装 onOpen触发器,以帮助设置菜单项。但是,这会在简单 onOpen触发器和已安装 onOpen触发器之间创建竞争条件-两者都访问相同的附加菜单。更糟糕的是,似乎没有办法“读取”附加菜单-没有可靠的方法来向简单的onOpen触发器传达是否存在已安装的触发器。
我目前正在尝试使用LockService和PropertiesService来解决竞争状况。
必须有一个更简单的解决方案-我不明白为什么这么难。