如何使用 Google Apps 脚本检查 "SpreadsheetApp.getUi().showSidebar(html);" 打开的侧边栏是否打开?

How can I check with Google Apps Script whether the sidebar opened by "SpreadsheetApp.getUi().showSidebar(html);" is open or not open?

背景:侧边栏不能用onOpen()打开。

"PropertiesService.getScriptProperties();"不应使用,因为它仅适用于一个用户(可能重叠)。如果侧边栏是打开的,则不应该发生任何事情来阻止它被重新加载,否则它应该被打开。无法在下一次执行的函数中覆盖全局变量。

function sidebar() {
  if (? == 'off') {
    var html = HtmlService.createHtmlOutputFromFile('sidebar')
      .setTitle('Title');
    SpreadsheetApp.getUi()
      .showSidebar(html);
  }
}

使用 getUserProperties() 它适用于每个用户每个脚本。通过在 https://script.google.com/home/.

处向 onOpen() 的相应脚本添加触发器,可以使用 onOpen() 打开侧边栏
var status = PropertiesService.getUserProperties(); // global variable

function onOpen() {
  status.setProperty('sidebar', 'off');
  sidebar();
}

function sidebar() {
  if (status.getProperty('sidebar') == 'off') {
    var html = HtmlService.createHtmlOutputFromFile('sidebar')
      .setTitle('Title');
    SpreadsheetApp.getUi()
      .showSidebar(html);
    status.setProperty('sidebar', 'on');
  }
}

这是我发现在这种特殊情况下有效的方法。它并不完美,但功能强大且非常简单:

.html

window.setInterval(function(){
    google.script.run.collectPing();
    }, 10000); 

.gs

function collectPing() {
  CacheService.getDocumentCache().put('sidebar', 'on', 15);
}

侧边栏打开时,每10秒调用一次服务器端,并在缓存中设置一个属性,持续15秒。然后你可以在服务器端写一个函数来查看缓存并根据缓存做一些事情属性。我只是想出了这个,所以它相对未经测试,但我的第一次尝试似乎表明它有效。