ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант

Как работать с Client-Side HTML в Google Script?

Добрый день. Подскажите как решить
Есть таблица1, таблица2, библиотека1, библиотека2.

В библиотеке1 есть код для создания модального окна, например с именем show().
В окне формирую объект и отправляю callback функции, которая сохраняет ответ в таблицы

1)В таблице1 если вызываю как
lib.show()
, то получаю в лог:
Информация: False
Притом это не из функции, я использую свой логгер и там больше информации выдаёт
Если вызываю из меню
('Показать окно', 'lib.show')
, то функция выполняется без проблем
UPD: [в примере такая конструкция работает нормально, а в исходном файле - нет]

2) библиотека2 вложена в библиотеку1, но её функции не участвуют в вызове окна или дальнейшей работе. Тем не менее, получаю разные ошибки: доступа или "404 NOT FOUND" в зависимости от того выбираю библиотеку2 в режиме разработчика или просто развёртыванием с номером версии

3) Всё это работает на моём аккаунте, но не работает на аккаунте владельца всех файлов.

4) Решил сделать копии файлов, при первом запуске выдал права, сейчас нормально показывается окно, но при вызове из окна
google.scrip.run.callback()
вылетает ошибка
"ScriptError: Для выполнения этого действия необходима авторизация."

Притом в логах выполнения callback() не выполняется
UPD: [Зашёл в библиотеку, запустил callback вручную, обновил права, проблема ушла]

5) Ещё одна штука которую не могу понять. Для возврата значений из модального окна вызываю
google.scrip.run
.withSuccessHandler(google.script.host.close)
.withFailureHandler(alertError)
[callback](data);

где callback - имя функции обратного вызова.
Функция лежит в библиотеке1, откуда и вызывается окно
Но! Если не сделать функцию с таким же именем(любого содержания) в таблице1, то на этом месте вылетает в консоль ошибка, что google.scrip.run.google.scrip.run - это не функция
Если одноимённая функция есть, то всё работает, но эта mock-функция не вызывается, а вызывается lib.callback()

Подскажите направление поиска, уже несколько дней с этим вожусь и не проясняется

UPD:

таблица1, библиотека1
  • Вопрос задан
  • 281 просмотр
Решения вопроса 1
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
1, 3, 4 - это одна проблема. Пользователь должен запустить любую функцию из библиотеки, чтобы авторизовать ее.

5 - это самая интересная штука. Когда вы создаете Ui из либы, то вы теряете контекст пользователя попадая в контекст либы. Когда же UI вызывает Client-Side API, то он обращается к корневому контексту. Если там нет именованной функции, то выполнения не будет, если же имя найдено, то исполнение передается на сторону сервера, где возвращается нужный контекст. Но и он является обрубленным, например, этот контекст не знает об активных Таблицах и Документах.

На текущий момент мне так и не удалось получить полнофункциональное приложение, которое бы работало с Ui из библиотеки.

Единственных "более-менее" вариантом считаю поставку кода из либы и ее eval. Что чревато, и очевидно, ломает суть цели это затеи.

Тема будоражит умы https://oshliaer.github.io/qna?mnemo=gas&target=44...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы