#google-apps-script #google-docs
#google-apps-script #google-docs
Вопрос:
Я создаю надстройку Docs с помощью скрипта Apps и вызываю showSidebar() из onOpen().
Когда я просматриваю журналы, он просто показывает «ошибка», напечатанную несколько раз, и не открывает боковую панель. Можно ли вызвать showSidebar() из функции onOpen()?
Отдельно я пытаюсь зарегистрировать электронную почту пользователя из onOpen() с помощью Session.getActiveUser().getEmail() и вижу, что она там не имеет значения. Но у него есть значение в showSidebar().
Я предполагаю, что я не понимаю разрешения с помощью скрипта приложений, кто-нибудь еще знает?
Комментарии:
1. Попробуйте использовать устанавливаемый onOpen ()
Ответ №1:
На основе Session.getActiveUser(),
- Если политики безопасности не разрешают доступ к идентификатору пользователя, User.getEmail() возвращает пустую строку.
- адрес электронной почты пользователя недоступен в любом контексте, который позволяет запускать скрипт без авторизации этого пользователя, например, простой триггер onOpen (e) или onEdit (e), пользовательская функция в Google Sheets или веб-приложение, развернутое для «выполнения от моего имени» (то есть с авторизациейразработчик вместо пользователя)
Следовательно, вам необходимо использовать устанавливаемый триггер, который может вызывать службы, требующие авторизации.
Чтобы вручную создать устанавливаемый триггер:
Пример конфигурации:
Пример кода:
Code.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()
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>
Вывод: