在允许观众访问幻灯片演示文稿之前,我可以使用幻灯片 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。但是为了打开自定义对话框,需要从自定义菜单中打开它。我认为这是使用此解决方法时的限制。
注:
- 以上脚本是用于测试解决方法的简单脚本。所以请根据自己的实际情况修改。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
我有一个 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。但是为了打开自定义对话框,需要从自定义菜单中打开它。我认为这是使用此解决方法时的限制。
注:
- 以上脚本是用于测试解决方法的简单脚本。所以请根据自己的实际情况修改。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。