Запускать скрипт приложений Google автоматически при загрузке сайта Google?

Я написал скрипт приложений, который берет электронную таблицу и преобразует ее в форму Google. Я хочу отобразить форму на своем сайте Google; однако я хочу, чтобы форма автоматически обновлялась каждый раз при открытии сайта, поэтому, если электронная таблица изменилась, форма также будет обновляться при ее отображении. По сути, я хочу, чтобы скрипт запускался автоматически при открытии сайта Google. Есть идеи, как это сделать?

Кроме того, в качестве примечания (не столь важного): есть ли способ включить скрипт на сайт Google, не отображая его как гаджет? Я не хочу отображать скрипт, я просто хочу, чтобы он работал в фоновом режиме.


person Kooshul    schedule 09.12.2015    source источник


Ответы (1)


Вы можете косвенно запустить функцию скрипта приложений, когда сайт загружается, создав отдельное веб-приложение с HTML-сервисом, опубликовав его и поместив window.onload в тег скрипта:

<script>
  window.onload = function() {
    console.log('Onload ran. ');

  };
</script>

Затем вы должны использовать google.script.run для запуска серверной функции:

<script>
  window.onload = function() {
    console.log('hah! it ran. ');
    google.script.run
      .withSuccessHandler(run_This_On_Success)
      .gsServerFunction();
  };

 window.run_This_On_Success = function(the_Return) {
   console.log('was successful!: ' + the_Return);
 };

Код.gs

function doGet() {
  return HtmlService.createHtmlOutputFromFile('index')
            .setSandboxMode(HtmlService.SandboxMode.IFRAME);
};

function gsServerFunction() {
  return true;
};

index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    This is the body


    <script>
      window.onload = function() {
        console.log('hah! it ran. ');
        google.script.run
          .withSuccessHandler(wuzSugzezvul)
          .gsServerFunction();
       };

       window.wuzSugzezvul = function() {
         console.log('was successful!');
       };
    </script>
  </body>
</html>

Then you can remove the border and the title of the apps script gadget, make it very small, and don't put in any text to display in the HTML.

person Alan Wells    schedule 10.12.2015
comment
Спасибо - я думаю, это имеет смысл. Однако я получаю сообщение об ошибке: не найден HTML-файл с именем index. (строка 7, код файла...) — мне нужно добавить index.html в качестве пользовательского поля HTML, или я сделал что-то не так? - person Kooshul; 10.12.2015
comment
Файл index.html представляет собой HTML-файл внутри редактора кода Apps Script, как и файл code.gs. Файл code.gs является файлом сценария по умолчанию в новом проекте. С этой стратегией вы вообще не используете поле HTML. Вы создаете новый скрипт приложений, а затем добавляете его в гаджет скрипта приложений. - person Alan Wells; 10.12.2015
comment
Вот что я сделал: я создал новый проект Apps Script, содержащий файлы Code.gs и index.html, а затем опубликовал его как веб-приложение и добавил на свой сайт гаджет Apps Script с URL-адресом веб-приложения. вставлен как скрипт, но он все еще говорит мне, что не может найти файл index.html - person Kooshul; 10.12.2015
comment
Не добавляйте .html в код. Просто используйте имя. createHtmlOutputFromFile('index') Расширение предполагается. Это единственная другая вещь, о которой я могу думать, что вызывает проблему. - person Alan Wells; 10.12.2015
comment
Попробуйте запустить код doGet() вручную, нажав кнопку «Выполнить» в редакторе кода. Возможно, вам потребуется утвердить некоторые разрешения. Кроме того, вы опубликовали скрипт как веб-приложение? Опубликовать -> Развернуть как веб-приложение - person Alan Wells; 10.12.2015