【问题标题】:Running showSidebar in onOpen (Google Docs add on)在 onOpen 中运行 showSidebar (Google Docs add on)
【发布时间】:2021-04-30 11:04:58
【问题描述】:

我正在使用 Apps 脚本构建一个 Docs 插件,并从 onOpen() 中调用 showSidebar()。

当我查看日志时,它只是显示“错误”打印了很多次,并且没有打开侧边栏。是否可以在 onOpen() 函数中调用 showSidebar()?

另外,我正在尝试使用 Session.getActiveUser().getEmail() 从 onOpen() 中记录用户的电子邮件,并看到它在那里没有任何价值。但它确实在 showSidebar() 中有一个值。

我猜我不了解 Apps Script 的权限,其他人知道吗?

【问题讨论】:

  • 尝试使用可安装的 onOpen()

标签: google-apps-script google-docs


【解决方案1】:

基于Session.getActiveUser()

  • 如果安全策略不允许访问用户的身份,User.getEmail() 返回一个空白字符串。

  • 用户的电子邮件地址在任何允许脚本在未经用户授权的情况下运行的上下文中均不可用,例如 简单的 onOpen(e) 或 onEdit(e) 触发器,Google 表格中的自定义函数,或部署为“以我身份执行”(即由开发人员而不是用户授权)的网络应用程序

因此,您需要使用installable trigger,它可以调用需要授权的服务。


To manually create an installable trigger:

示例配置:


示例代码:

代码.gs

function onOpen(e) {
  showSidebar();

  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var email = e.user.getEmail();
  body.appendParagraph(email);
  body.appendParagraph(Session.getActiveUser().getEmail());

}

function showSidebar() {
  var html = HtmlService.createHtmlOutputFromFile('Page')
      .setTitle('My custom sidebar');
  DocumentApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
      .showSidebar(html);
}

function getActiveUser(){
  var email = Session.getActiveUser().getEmail(); 
  Logger.log(email);
  return email;
};
  • 我使用了 2 种不同的方法来获取活跃用户,1.) 使用 onOpen() event object e.user.getEmail(),以及 2.) 使用 Session.getActiveUser().getEmail()

  • 这两个选项都能够显示活动用户的电子邮件,如在电子邮件作为段落附加的文档中所见。

Page.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  </head>
  <body>
    
    <div id="rangeResult"></div>
    <script>
    function addRange(rangeStartEnd){ 
      $('#rangeResult').text(rangeStartEnd);
    };
    
    google.script.run.withSuccessHandler(addRange).getActiveUser();
    </script>    
  </body>
</html>

输出:

【讨论】:

    猜你喜欢
    • 2021-06-20
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    相关资源
    最近更新 更多