【问题标题】:Custom menu onOpen does not show自定义菜单 onOpen 不显示
【发布时间】:2015-01-16 21:02:32
【问题描述】:

这个 sn-p 在打开工作表时创建一个自定义菜单,正如预期的那样:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom Menu')
      .addItem('First item', 'menuItem1')
      .addToUi();
}

function menuItem1() {
  SpreadsheetApp.getUi().showModelessDialog(userInterface, title) 
     .alert('You clicked the first menu item!');
}

添加这一行:

var CALNAME= CalendarApp.getDefaultCalendar(); 

阻止自定义菜单显示,除非我手动运行onOpen()。我可以使用一个函数来修复它:

function CALNAME() { 
  return  CalendarApp.getDefaultCalendar();
}

但我想了解为什么分配变量不起作用。

【问题讨论】:

  • 将 getDefaultCalendar 放入我从 onOpen 调用的单独函数中对我不起作用。我得到了同样的“您无权调用 getDefaultCalendar”错误。有什么想法吗?

标签: google-apps-script google-sheets google-calendar-api


【解决方案1】:

当您在 GAS 中启动脚本时(在这种情况下,打开事件会触发 onOpen 函数),GAS 会加载所有代码,执行正文中的代码(在这种情况下, var CALNAME= CalendarApp.getDefaultCalendar(); ),并且之后执行 onOpen。​​

在评估 CalendarApp.getDefaultCalendar() 时退出执行似乎是一个错误,所以 onOpen 永远不会被执行。

常见的原因是:出于安全原因,open 事件在“privilegesLESS”环境中执行 onOpen,因此您对 onOpen 可以做的事情非常有限。看来您无法在该环境中执行 CalendarApp.getDefaultCalendar()。

尝试从 onOpen 调用 CALNAME(),你会看到它中断了。

【讨论】:

  • 没错。它中断了,我注意到我进入了 Firebug 控制台:“Google Apps 脚本:您无权调用 getDefaultCalendar”。我认为这是因为 Gmail 服务需要用户授权。
【解决方案2】:

答案是使用可安装的触发器,而不是标准的 onOpen。​​

请参阅Installable Triggers Reference 中的“手动管理触发器”位。 感谢Serge insasthis question 中的提示

【讨论】:

    猜你喜欢
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    相关资源
    最近更新 更多