在允许观众访问幻灯片演示文稿之前,我可以使用幻灯片 API 添加一个 "Agree to Terms" 对话吗?

Can I use Slides API to add an "Agree to Terms" dialogue before allowing viewer access to a Slides presentation?

我有一个 Google 幻灯片演示文稿,我想在查看前请求同意 "Terms & Conditions"。 (对话框将在法律细则中包含一个外部 link。)

我看到用 Google App Script 添加对话框是 possible,但我不清楚是否可以通过这种方式自定义。

提前感谢您对此提供的任何帮助。

  • 您想在用户打开 Google 幻灯片时打开一个对话框。
    • 在这种情况下,用户登录到每个 Google 帐户。
  • 你想让用户通过外部显示 "Terms & Conditions" link。
  • 当用户单击 "ok" 按钮时,当用户重新打开 Google 幻灯片时,您不想打开对话框。
  • 当用户单击 "cancel" 按钮时,当用户重新打开 Google 幻灯片时,您要打开对话框。
  • 您想为此使用自定义对话框。

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

问题和解决方法:

为了在用户打开 Google 幻灯片时打开自定义对话框,需要使用可安装的触发器。但是在 Google 幻灯片中,不幸的是,在当前阶段,OnOpen 事件触发器不能用作可安装触发器。这样,当用户打开 Google 幻灯片时,自定义对话框将无法打开。这似乎是当前的规范。因此,为了实现您的目标,需要考虑解决方法。在这个答案中,我想提出以下 2 个解决方法。

解决方法 1:

幸运的是,在 Google 幻灯片中,可以使用简单触发器代替无法使用的可安装触发器。在这种情况下,OnOpen 事件触发器可以用作简单触发器。因此,在此解决方法中,内置对话框与简单触发器一起使用。

示例脚本:

请将以下脚本复制并粘贴到 Google 幻灯片的容器绑定脚本中并保存。当您打开 Google 幻灯片时,会打开一个对话框。单击 "ok" 时,keyObject 将设置为 PropertiesService。这样,当您再次打开 Google 幻灯片时,不会打开该对话框。在这种情况下,使用 getUserProperties()。所以keyObject可以用于每个用户。

function onOpen() {
  var keyObject = {key1: "value1"};  // Here, key and value for checking whether user had clicked "ok" button.

  var prop = PropertiesService.getUserProperties();
  var value = prop.getProperty(Object.keys(keyObject)[0]);
  if (value != keyObject.key1) {
    var ui = SlidesApp.getUi();
    var result = ui.alert('sample title', 'Please check this link.\nhttps://###/', ui.ButtonSet.YES_NO);
    if (result == ui.Button.YES) {
      ui.alert('"ok" was clicked.');
      prop.setProperties(keyObject);
    } else {
      ui.alert('"cancel" was clicked.');
    }
  }
}
  • 在这种情况下,无法点击URL。因此用户需要访问 URL。我认为这是使用此解决方法时的限制。
  • 如果要删除keyObject。请使用以下脚本。

    function deleteProperty() {
      var keyObject = {key1: "value1"};
      var prop = PropertiesService.getUserProperties();
      prop.deleteProperty(Object.keys(keyObject)[0]);
    }
    

解决方法 2:

在此解决方法中,内置对话框和自定义菜单与简单触发器一起使用。在这种情况下,使用自定义对话框。

示例脚本:

请将以下脚本复制并粘贴到 Google 幻灯片的容器绑定脚本中并保存。当您打开 Google 幻灯片时,会打开一个对话框。对话框显示 "Please open dialog from the menu."。用户单击 "ok" 按钮并从自定义菜单中打开自定义对话框。在自定义对话框中单击 "ok" 时,keyObject 将设置为 PropertiesService。这样,当您再次打开 Google 幻灯片时,不会打开该对话框。在这种情况下,使用 getUserProperties()。所以keyObject可以用于每个用户。

function onOpen() {
  var keyObject = {key1: "value1"};
  var prop = PropertiesService.getUserProperties();
  var value = prop.getProperty(Object.keys(keyObject)[0]);
  if (value != keyObject.key1) {
    var ui = SlidesApp.getUi();
    ui.createMenu('Open dialog').addItem('Open dialog', 'openDialog').addToUi();
    var result = ui.alert('sample title', 'Please open dialog from the menu.', ui.ButtonSet.OK);
  }
}

function openDialog() {
  var ui = SlidesApp.getUi();
  var html = '<a href="https://###/" target="_blank">link</a><input type="button" value="ok" onClick="ok()"><input type="button" value="cancel" onClick="cancel()"><script>function ok() {google.script.run.withSuccessHandler(()=>google.script.host.close()).setProp()}function cancel() {google.script.host.close()}</script>';
  ui.showModalDialog(HtmlService.createHtmlOutput(html), "sample");
}

function setProp() {
  var keyObject = {key1: "value1"};
  var prop = PropertiesService.getUserProperties();
  prop.setProperties(keyObject);
}
  • 在这种情况下,可以点击URL。但是为了打开自定义对话框,需要从自定义菜单中打开它。我认为这是使用此解决方法时的限制。

注:

  • 以上脚本是用于测试解决方法的简单脚本。所以请根据自己的实际情况修改。

参考文献:

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