首页 文章

应用脚本:在新表单上设置触发器以显示侧边栏或菜单项

提问于
浏览
0

我有一个脚本正在创建一个表单的副本 . 当用户第一次打开表单时,我希望它显示侧边栏或菜单项 . 在发生任何身份验证流程之前,这是否可行?

添加onOpen函数似乎没有工作,因为它不会自动触发,除非您已经完成了身份验证过程 .

附加组件的工作方式似乎是我想要的行为,但我不确定你是否可以为Forms创建附加组件 .

代码示例请帮助...谢谢

2 回答

  • 0

    在用户授权之前,可以通过onOpen()为Form创建菜单项 . 例如,以下内容将创建一个包含单个菜单项的菜单:

    function onOpen(e) {
      // Only creates menu item, and nothing else
      FormApp.getUi()
          .createMenu('My Menu')
          .addItem('My Menu item','myFunction')
          .addToUi();
    }
    
    function myFunction() {
       // Functionality here; may include code that requires authorization
    }
    

    要记住的是,onOpen应仅用于创建菜单 - 它不应包含任何需要授权的代码 . 原因是Apps脚本允许onOpen()在未经授权的情况下运行,但如果其中的任何内容需要授权,则会完全阻止其执行 . 这是一个用户安全机制 - onOpen()在用户与Form交互之前运行,并且在不首先获得用户许可的情况下永远不会自动运行 . 因此,如果脚本未经授权,则Apps脚本将仅允许执行某些任务(如菜单创建) .

    出于同样的原因,重要的是不要使用访问Apps脚本服务的全局变量 . 在读取脚本文件时读取和处理全局变量,从而在要求用户授权之前执行 . 如果使用全局变量,最佳做法是将它们限制为简单常量 .

    您可以阅读有关Apps Script Authorization Lifecycle的更多信息 . 本文档重点介绍Apps脚本加载项的授权,但其中大部分内容与常规Apps脚本脚本相关 .

  • 1

    另一个答案是关于授权的正确,onOpen具有有限的功能,因为它在没有用户明确许可的情况下运行 . 您也可以使用它来创建侧边栏(不仅仅是菜单项)

    示例如下:

    function onOpen() {
      var userInterface = createUi();
      var ui = formApp.getUi();
      ui.showSidebar(userInterface)
    }
    
    function createUi(){
      var app = UiApp.createApplication().setTitle('test sidebar');
      var panel = app.createVerticalPanel();
      panel.add(app.createLabel('This is a SideBar'));
      return app.add(panel);
    }
    

    如上所述(但我坚持;-)如果您使用全局服务调用时要小心,因为在调用每个函数时执行这些调用(包括onOpen)并且可能会阻止脚本按预期工作 .

相关问题