多个.gs文件中的多个onOpen()函数

时间:2016-12-14 00:30:29

标签: javascript google-apps-script google-apps

我正在尝试学习Google Apps脚本,我刚刚在同一个项目中创建了两个“。gs文件”,每个都有一个onOpen()函数。

保存,关闭然后打开文档后,只运行了一个onOpen()函数( Sidebar.gs 文件)。

这些是否需要包含在同一个文件中?好吧,我想我知道这是一个解决方法。我想我的问题是为什么?

Project:

Code.gs:
    function onOpen() {
    DocumentApp.getUi().createMenu("PACKT").addItem("Greeting","greeting").addToUi();
    }

    function greeting() {
    var ui = DocumentApp.getUi();
    ui.alert("Greeting", "Hello World!", ui.ButtonSet.OK);
    }

Sidebar.js:

    function onOpen() {
    var htmlOutput = HtmlService.createHtmlOutput('<button onclick="alert(\'Hello World!\');">Click Me</button>').setTitle("My Sidebar");
    DocumentApp.getUi().showSidebar(htmlOutput);
    }

谢谢!

1 个答案:

答案 0 :(得分:3)

您应该永远在同一名称空间中具有两个具有相同名称的函数。它根本没有意义:当functionName()调用发生时应该执行哪一个? (实际上,最后定义的函数将是幸存的函数;其余的函数在没有跟踪的情况下丢失)。

特别是,你不应该在同一个项目中有两个onOpen函数,无论是一个文件还是单独的(文件共享命名空间,这意味着一个文件中的函数可以从另一个文件中调用,就好像它们在同一个文件)。

但是你的一个 onOpen()函数可以简单地调用需要运行的任何函数:

function onOpen() {
  doThisThing();
  doAnotherThing();
}