Передайте значение скрипта google в html

Caesar спросил: 28 апреля 2018 в 09:34 в: javascript

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

Я пытаюсь передать переменную из своего сценария google (который изначально хранится в Google PropertiesService ) к моему html, потому что я хочу использовать ранее сохраненные данные в качестве значений для текстового поля ввода (показывая ранее сохраненные данные).

Это мой файл gs (минус несвязанные части):

function openSettings() {  var htmlTemplate = HtmlService.createTemplateFromFile('settingsForm')  var userProperties = PropertiesService.getUserProperties();
  var time = userProperties.getProperty('selectedTime');
  htmlTemplate.timehtml = time;  var html = htmlTemplate.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
    .setTitle('Settings')
    .setWidth(300)
  SpreadsheetApp.getUi()
    .showSidebar(html);
  return html
}function processForm(form) {  var userProperties = PropertiesService.getUserProperties();  var time = userProperties.getProperty('selectedTime');
  time = form.time;
  userProperties.setProperty('selectedTime', time);
}

И это мой html-файл (оставленный вне других несвязанных частей):

<!DOCTYPE html><html><div>
 <form>
   <input type="text" name="time" id="time" style="width: 40px;">
   <br><br><input type="button" class="action" onClick="writeFormData(); 
   alert('submitted')" value="Submit"/>
 </form>
</div><script>
  var timeInput = document.getElementById("time");
  var timehtml = time;
  timeInput.value = timehtml;
</script><script type="text/javascript">
       function writeFormData() {
           google.script.run.processForm(document.forms[0]);
       }
</script></html>

Возможно, весь мой подход ошибочен. Но то, что я пытаюсь сделать, это хранить пользовательские варианты (возможно, захотите изменить userProperties на documentProperties, чтобы сделать документ настроек) в Google PropertiesService, а затем сохранить эти значения, когда кнопки отправки нажаты на боковой панели. В следующий раз, когда боковая панель открывается, эти сохраненные настройки должны быть показаны.


1 ответ

Есть решение
Anton Dementiev ответил: 28 апреля 2018 в 09:55

Вы на правильном пути. Поскольку вы уже передали переменную объекту HtmlTemplate, единственным оставшимся шагом является использование механизма шаблона GAS для его отображения.

.GS-файл

...
htmlTemplate.timehtml = time;
...

HTML-шаблон

   <input type="text" name="time" id="time" value="<?!= timehtml ?>">

Подробнее о шаблоном HTML в GAS здесь https://developers.google.com/apps-script/guides/html/templates

Причина, по которой ваш код не работает, заключается в том, что вы передаете переменную, установив свойство объекта HtmlTemplate. Объекты HtmlTemplate и HtmlOutput существуют только в контексте среды исполнения редактора GAS Script Editor. Ваш браузер заканчивает тем, что получает строку HTML, которую он затем анализирует на элементы DOM и визуализирует. На этом этапе любой связанный с GAS контекст теряется, а локально установленное программное обеспечение браузера является новой средой выполнения для вашего кода. Вот почему вы не можете ссылаться на переменную "timehtml".

Caesar ответил: 28 апреля 2018 в 10:14
Работает как шарм, спасибо большое! Вы также знаете, как это сделать с помощью переключателей? Я попытался применить ту же логику, но это, похоже, не работало для меня. (Я добавил значение ="<?! = Radiohtml? & Gt;" для обоих переключателей)