использование библиотеки закрытия Google из скриптов приложения Google с использованием HtmlService

Можно ли получить доступ к функциям библиотеки закрытия Google из скриптов приложения Google через HtmlService? Файлы html в скриптах Google, кажется, отфильтровывают все, что связано с библиотекой закрытия.

проект: я изучаю утилиты управления DOM из библиотеки Google Closure из скриптов приложения Google с помощью HtmlService. Я собираюсь запустить это как отдельное веб-приложение.

Функции закрытия работают при прямой загрузке в браузер из локальной клиентской среды, но они не работают при внедрении из приложения GAS с помощью утилиты HtmlService.

Вот код, который я использую в ГАЗе.

html файл

<html>
  <head>
  <script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
  <script>
    goog.require('goog.dom');
    function c_sayHi() {
      var newHeader = goog.dom.createDom('h1', {'style': 'background-color:#EEE'},'Hello world!');
      goog.dom.appendChild(document.body, newHeader);
    }
  </script>
  </head>

  <script>
    function c_updateButton(date, button) {
      button.value = "clicked at " + date;
    }
  </script>

  <body onload="c_sayHi()">
    <input type='button' value='Never Clicked'
    onclick='google.script.run.withSuccessHandler(c_updateButton).withUserObject(this).s_getCurrentDate()'>

    <input type='button' value='Never Clicked'
    onclick='google.script.run.withSuccessHandler(c_updateButton).withUserObject(this).s_getCurrentDate()'>
  </body>
</html>

Файл скрипта Google

function s_getCurrentDate() {
  return new Date().toString();
}

function doGet(e) {
  return HtmlService.createTemplateFromFile('hello').evaluate();
}

У меня есть префикс c_ для функций на стороне клиента и s_ для fns на стороне сервера. При запуске в качестве веб-приложения

  1. Функция c_sayHi не действует - я не уверен, вызывается ли она вообще.

  2. Функции s_getCurrentDate и c_updateButton работают нормально, как описано в документации Google https://developers.google.com/apps-script/html_service.

Есть ли способ заставить библиотеку закрытия работать из веб-приложений, как описано выше?


person Siva    schedule 20.11.2012    source источник


Ответы (2)


Пара вещей здесь -

  1. Все файлы .gs - это JavaScript, работающий на стороне сервера. Так что DOM здесь не актуален.
  2. Вы можете запустить клиентский JavaScript, вернув код в HtmlService. Я считаю, что это то, что вы хотите сделать. Однако jQuery - лучшая поддерживаемая библиотека для этого подхода. Закрытие может в конечном итоге сработать, но команда специально не тестирует эту библиотеку.
person Arun Nagarajan    schedule 20.11.2012
comment
Спасибо, Арун, вы правы - я пытаюсь создать клиентский java-скрипт через HtmlService. jQuery для меня немного пугает по сравнению с Closure, который кажется мне более простым и понятным для меня, чтобы следовать логике кода. Я не нашел много документации о том, как мы можем использовать библиотеку Closure от GAS. Знаете ли вы о каких-либо примерах GAS, в которых используется закрытие? - person Siva; 21.11.2012
comment
Посмотрите это видео - youtube.com/watch?v=tcl24asytos, а также прочитайте Caja раздел на этой странице - developers.google.com/apps-script/html_service. Одна вещь, которую вы увидите, это то, что вы не можете внедрить динамический JS, такой как onload или onclick. Я действительно предлагаю придерживаться jQuery вместо Closure при работе с Apps Script, поскольку вы найдете гораздо больше примеров. - person Arun Nagarajan; 22.11.2012

Проблема в том, что структура зависимостей Closure выполняется до события загрузки окна, иначе это не сработает. Таким образом, любые операторы require и provide обрабатываются до загрузки окна. Когда вы вводите их через службу HTML, вы заставляете их выполнение на другом этапе, чем это необходимо, что приводит к сбою всего.

Если вы будете использовать Скомпилированную библиотеку закрытия, у вас не будет проблем с запуском Closure. Узнайте, как использовать компилятор и построитель для правильной работы замыкания. Кроме того, вы можете использовать отложенную загрузку для имитации службы HTML.

При этом вы можете сделать так, чтобы javascript загружался динамически по клику, загрузке или как угодно, черт возьми. Это называется отложенной загрузкой и используется как стандартная практика для всех крупных веб-приложений. Следите за вкладкой «Сеть» в Firebug при просмотре через Gmail или Facebook.

Арун Нагараджан прав, jQuery - более простое решение, но если вы делаете что-то правильное, требующее широты, масштаба и скорости, jQuery - это игрушка для детей.

person flavian    schedule 24.11.2012