【问题标题】:Google Apps Script toast messages don't appear for anonymous editorsGoogle Apps 脚本 toast 消息不会显示给匿名编辑者
【发布时间】:2019-12-20 03:42:11
【问题描述】:

我在可安装的 onEdit 触发器函数中调用了一条 toast 消息,每当进行编辑时,该函数都会在 Google 表格界面中显示一条消息。对于登录到其 Google 帐户的用户,该消息会按预期显示,但当编辑者匿名时,它不会显示在界面中。

我有一个启用匿名编辑的表格文件(“知道链接的任何人”)。有一个独立的 Google Apps 脚本项目,它安装了一个可安装的 onEdit 触发器。该函数中的所有内容对于匿名用户和登录用户都可以成功执行,但 toast 消息除外,该消息仅对登录用户显示。

可安装的 onEdit 触发器设置为执行 showMessage 函数。

触发器安装方式:

ScriptApp.newTrigger('showMessage').forSpreadsheet('thefileid').onEdit().create();

showMessage 功能:

function showMessage(e) {

    var msg = 'Some msg';
    var title = 'Some title';
    var file = e.source;
    var activeSheet = file.getActiveSheet();
    file.toast(msg, title);

    // do other things

}

toast 消息显示给登录用户,而不是匿名用户。函数中的“其他事物”按每个人的预期工作。我正在寻找一种向匿名用户显示该消息的方法(或寻找某种方式向他们传达自动消息)。脚本项目是独立的,不是容器绑定的,所以我不能使用 Ui 类来通知他们。容器绑定脚本不是一个选项,因为此脚本的大小很大并且可以在多个文件上运行。

【问题讨论】:

  • 查看文档中的required scopes——您是否检查过您的匿名用户是否启用了此授权?如果您还没有检查过,可以参考触发器here;您可以尝试的其他方法是禁用此触发器并检查行为是否按预期停止,以避免在您的脚本实际上是由其他东西触发时造成混淆(这对任何人都不起作用) .

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


【解决方案1】:
  • 您希望在电子表格的单元格被匿名编辑时显示一条消息。
  • 电子表格公开共享给编辑者匿名用户。

如果我的理解是正确的,那么这个答案呢?不幸的是,即使使用安装的 OnEdit 事件触发器,在编辑匿名用户时,toast() 和 Class Ui 也无法使用。因此,作为几种解决方法之一,我想建议使用图像。幸运的是,insertImage() 可以用于这种情况。所以我正在使用这个解决方法。请认为这只是几个答案之一。

在使用此脚本之前,请准备一张图片以供显示。

示例脚本:

在使用此脚本之前,请设置图片的文件ID。并且请为showMessage()的功能安装OnEdit事件触发器。

function showMessage(e) {
  var fileId = "###"; // Please set the file ID of the image.

  var sheet = e.source.getActiveSheet();
  var blob = DriveApp.getFileById(fileId).getBlob();
  var image = sheet.insertImage(blob, 2, 3);
  Utilities.sleep(3000);
  image.remove();
}
  • 在此示例脚本中,当编辑单元格时,显示准备好的图像并等待 3 秒,然后删除图像。

结果:

注意:

  • 当然,您可以创建一个图像用于与脚本一起显示。但在这种情况下,工艺成本会变高。结果,直到显示图像的时间变长。所以我建议使用预先创建的图像。

参考资料:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

【讨论】:

  • 感谢您的建议!这似乎对所有匿名并登录的用户都有效,尽管当文件有多个编辑器时它卡在 image.remove() 上。执行时间从 7s 到 25s,然后再到 80s。直到我关闭匿名编辑器的浏览器,80 秒的执行才停止。这对我来说似乎是一个合理的解决方法,但我不会将其标记为“答案”,因为我怀疑 toast 函数实际上有问题。
  • @gccree 感谢您的回复。我带来的不便表示歉意。不幸的是,我无法理解when the file has multiple editors。我可以问你关于它的详细信息吗?我深表歉意,由于谷歌方面的规范,“吐司功能”不能用于您的情况。我找不到其他解决方法来使用“吐司功能”的情况是由于我的技能不佳。我也必须为此道歉。
  • 我的意思是当有多个人同时访问文档时。不过,这是一个很好的解决方法,我目前正在使用它。
  • @gccree 感谢您的回复。您通过共享多个用户来使用一个电子表格。我的理解正确吗?我能问一下您目前的解决方法吗?
  • 是的,没错。我目前正在使用您的 insertImage() 解决方法。
【解决方案2】:

正如您在documentation 中看到的那样:

Apps 脚本需要用户授权才能访问来自 built-in Google Servicesadvanced Google services 的私​​人数据

这意味着您可以与任何人共享您的脚本,但他们需要登录才能使用该脚本。

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2014-07-04
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多