ScriptError: Для выполнения этого действия требуется авторизация. при запуске google.script.run из библиотеки

С уважением,

Я нашел несколько вопросов, касающихся этой ошибки: "ScriptError: Authorisation is required to perform that action.", но я не могу найти ни одного, касающегося моей проблемы.

То, что я пытаюсь сделать, это вызвать файл функции .gs из файла .html, используя google.script.run, где оба файла находятся в библиотеке. Ссылаясь на этот ответ, этот ответ и отчет об ошибке, я создал функцию-оболочку в скрипте, который использует библиотеку , но так и не удалось завершить выполнение.

Вот что я сделал:

.html в библиотеке:

<html>

<head>
  <script>
    function onFailure(error) {
      console.log("ERROR: " + error);
    }

    function myfunc() {
      console.log("HERE");
      google.script.run.withFailureHandler(onFailure).callLibraryFunction('LibraryName.test', ['test123']);
    }
  </script>
</head>

<body>
  <button onclick="myfunc()">CLICK</button>
</body>

</html>

.gs в библиотеке

function test(x){
  Logger.log(x);
}

.gs в скрипте, который использует библиотеку:

function callLibraryFunction(func, args) {
  var arr = func.split(".");

  var libName = arr[0];
  var libFunc = arr[1];

  args = args || [];

  return this[libName][libFunc].apply(this, args);
}

Консоль регистрирует HERE, но затем записывает ERROR: ScriptError: Authorisation is required to perform that action. вместо ожидаемого вывода, test123.

ПРИМЕЧАНИЕ. HTML-код предназначен для пользовательского немодального диалогового окна в Таблицах, а не для веб-приложения.

Я очень надеюсь, что кто-то может помочь мне в этом. Заранее спасибо.


person Bismuth Habs    schedule 14.11.2020    source источник
comment
Не похоже, что вы используете функцию doGet() в своей библиотеке для доступа к HTML-части вашей библиотеки.   -  person ziganotschka    schedule 16.11.2020
comment
Мне нужно doGet() ? Потому что я не обращаюсь к нему из URL-адреса веб-приложения, и я просто использую HTML для настраиваемого диалогового окна в Таблицах, а не для перенаправления на страницу. (Прошу прощения, что забыл упомянуть об этом ранее, я обновлю вопрос.) Однако я создал HtmlOutput из файла HTML [например: .createOutputFromFile("htmlfile")], и HTML отображается и запускается, поскольку консоль регистрирует HERE, как я упоминал в вопрос.   -  person Bismuth Habs    schedule 16.11.2020
comment
Я понимаю. Пробовали ли вы один раз запустить сценарий вручную из редактора сценариев перед тем, как сделать это из диалогового окна? См. здесь.   -  person ziganotschka    schedule 17.11.2020
comment
Я так и сделал, и консоль выводит ожидаемый результат test123. Это означает, что он работает при непосредственном использовании без диалога. Кроме того, все необходимые разрешения/области были проверены. Я даже попытался сделать область действия более общей, отредактировав файл манифеста appscript.json. Но все равно не повезло.   -  person Bismuth Habs    schedule 17.11.2020
comment
1. Содержит ли ваша библиотека кода какие-либо триггеры, которые могут привести к вашей ошибке? 2. Какие области вы указали в своем манифесте? 3. Взгляните на это.   -  person ziganotschka    schedule 17.11.2020
comment
1. Триггер срабатывает при нажатии одного из настраиваемых меню Таблиц. 2. Прицелы, которые я использую: https://www.googleapis.com/auth/documents https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/drive.scripts https://www.googleapis.com/auth/gmail.compose https://www.googleapis.com/auth/script.container.ui https://www.googleapis.com/auth/script.external_request https://www.googleapis.com/auth/spreadsheets 3. Спасибо. Я прочитал это. Пробовал. К сожалению, не повезло.   -  person Bismuth Habs    schedule 17.11.2020
comment
Вы развернули библиотеку как новую версию после внесения каких-либо изменений? Вы вручную редактировали области в манифесте как в библиотеке, так и в файле? Можете ли вы показать свой ПОЛНЫЙ код библиотеки и файла, в котором я использовал библиотеку? Включая функции для отображения диалога.   -  person ziganotschka    schedule 17.11.2020
comment
Привет @BismuthHabs, ты нашел решение? У меня точно такая же проблема (код из библиотеки работает, когда запускается непосредственно в редакторе сценариев и выдает ScriptError, когда запускается из диалогового окна).   -  person Shrike    schedule 19.03.2021
comment
Привет @Shrike, да, я до сих пор не нашел решения для этого. В итоге я просто использовал код напрямую, а не как библиотеку. Если вы найдете какое-либо решение для этого, сообщите нам.   -  person Bismuth Habs    schedule 26.03.2021


Ответы (1)


Вам необходимо предоставить доступ к библиотеке LibraryName в качестве авторизованного приложения в вашей учетной записи Gmail так же, как вы предоставляете доступ к вызывающему сценарию. Я предполагаю, что вы вызвали метод HtmlService.createHtmlOutputFromFile(...) в своей библиотеке. Это требует дополнительной авторизации. Вы должны предоставить это. Что вы можете сделать, так это создать временную функцию в библиотеке, которая имеет HtmlService.createHtmlOutputFromFile(..). Запустите его из редактора скриптов, и появится окно с требованием авторизации. Приступить к предоставлению доступа...

person Moayad Hani Abu Rmilah    schedule 13.06.2021