Связанный с контейнером скрипт, получающий ошибки прав доступа при попытке запустить функции с google.script.run из боковой панели - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь внедрить боковую панель в свою электронную таблицу, чтобы получить пользовательский ввод для использования моих сценариев. Я не смог заставить его успешно вызывать какие-либо функции на стороне сервера. Я собрал простой сценарий из документации Google и несколько вопросов о стеке потока, которые я прочитал, но получаю сообщение об ошибке. Он может печатать на консоль, но выдает ошибку при попытке вызвать функцию logText () с google.script.run .

Файл сценария: * Файл 1007 *

function onOpen() {
  SpreadsheetApp.getUi()
      .createMenu('Extra Functions')
      .addItem('Show sidebar', 'showSidebar')
      .addToUi();
}
function showSidebar() {
  var html = HtmlService.createHtmlOutputFromFile('Test')
    .setTitle('Testing')
    .setWidth(300);
  SpreadsheetApp.getUi()
    .showSidebar(html);
}
function logInput(text) {
  Logger.log(text);
}

HTML (тест. html):

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
    function onFailure(error) {
      var div = document.getElementById('output');
      div.innerHTML = "ERROR: " + error.name + ": " + error.message;
    }
    function logText(){
      var txt = document.getElementById("txt_input").value;
      console.log(txt);
      google.script.run.withFailureHandler(onFailure).logInput(txt);
    }
    </script>
  </head>
  <body>
    <label for="txt_input">Input Text:</label>
    <input type="text" id="txt_input"><br>
    <button onclick='logText()'>Send Name</button><br>
    <div id="output"></div>
  </body>
</html>

Я попытался запустить его как на новом скрипте приложений V8, так и на скриптах приложений Legacy, и я получаю немного отличающаяся ошибка для каждого.

Legacy Script Apps

ОШИБКА: ScriptError: У вас нет доступа для выполнения этого действия. Пожалуйста, попросите владельца этого элемента предоставить вам доступ.

Apps Script V8

ОШИБКА: ScriptError: К сожалению, произошла ошибка сервера при чтении из место хранения. Код ошибки PERMISSION_DENIED.

Я занимался исследованием авторизации, но, насколько я могу судить, у него есть все разрешения, необходимые для сценария, связанного с контейнером (https://developers.google.com/apps-script/guides/bound) , Он имеет область видимости / auth / script.container.ui OAuth, которая должна позволять ему "отображать и запускать сторонний веб-контент в приглашениях и на боковых панелях внутри приложений Google", а также / аутентификация / таблицы Область применения. Я также являюсь владельцем электронной таблицы и проекта сценария.

Поскольку он не функционирует как веб-приложение, его не нужно развертывать и ему не нужна функция doGet (). https://developers.google.com/apps-script/guides/html#serve_html_as_a_google_docs_sheets_slides_or_forms_user_interface

Я не уверен, что еще можно попытаться заставить это работать, любая помощь будет принята с благодарностью

Ответы [ 3 ]

2 голосов
/ 11 марта 2020

У меня была такая же проблема, для меня проблема заключалась в том, что пользователь входил в систему с несколькими аккаунтами Google. Это может относиться и к вашему делу. Пользователь попытался войти в систему только с одной учетной записью, и проблема с разрешением исчезла.

Это та же проблема, которая может возникнуть при установке пользовательского дополнения. Надеюсь, это поможет.

1 голос
/ 05 марта 2020

Я испытал точно такую ​​же проблему и решил ее, отключив новый двигатель V8.

1 голос
/ 04 марта 2020

Похоже, ошибка в новом движке. У меня аналогичная проблема. Функция из скрипта вызывается из HTML. Новый двигатель выходит из строя. Я отключил двигатель V8, и он работал, так что, похоже, это что-то внутреннее для Google.

...