Как управлять HTML-страницами с помощью автономного Google Apps Script?

Вопрос или проблема

Я использую HTMLService для создания независимого веб-приложения на Google Apps Script. Я хочу иметь возможность писать код, который будет обрабатывать нажатия на ссылки на HTML-странице приложения и переходить на страницы, указанные в этих ссылках. Почти как на обычной веб-странице, но это Google Web App. Обычная строка “>Нажми на меня” не работает.

Вот что я делаю:

Code.gs

/*
 * Основная функция, настраивает пользовательский интерфейс веб-приложения.
 */ 
function doGet() {
    return HtmlService.createHtmlOutputFromFile('Index')
   .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

 function navigateTo(url) {
   return HtmlService.createHtmlOutputFromFile(url)
  .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
    function handleNavigation() {
      //Logger.log("Привет из handleNavigation, в Index.html");
      google.script.run.navigateTo('EditUsers')
      document.getElementById("test").innerHTML = "Успех!";
    }
  </script>
  </head>
  <body>
    <h1>Главная</h1>
    Это начало веб-приложения для статуса проекта<br/>
    <a href="EditUsers.html">Редактировать пользователей</a><br/><button
        onclick="handleNavigation()">Время кнопки!</button>
    <a id="test" href="EditProjects.html">Редактировать проекты</a><br/>
    <a href="ViewProjectStatuses.html">Просмотреть статусы проектов</a><br/>
  </body>
</html>

Настройка системы навигации по страницам включает несколько частей. Если HTML в “странице” уже присутствует, тогда вы можете захотеть или не захотеть получать весь новый контент с сервера и снова внедрять контент. Если есть контент, который меняется, вы можете захотеть получить контент с сервера и внедрить новый контент. Если контент на странице не нужно обновлять, и контент уже присутствует, тогда все, что вам нужно сделать, это отобразить страницу и скрыть предыдущую страницу. Вам может потребоваться, чтобы код для навигации по страницам проверял все эти ситуации и действовал соответственно.

Вы можете получать один и тот же контент с сервера каждый раз, когда пользователь переходит на новую страницу, и в этом случае код будет намного проще. Поэтому не обязательно проверять наличие существующего контента каждый раз.

Если на “странице”, которую вы хотите показать, нет контента, вам потребуется withSuccessHandler(), чтобы получить новый HTML с сервера.

Сейчас у вас есть:

google.script.run.navigateTo('EditUsers')

Вам нужно:

google.script.run
  .withSuccessHandler(injectNewHtml)
  .navigateTo('EditUsers');

function injectNewHtml() {
  //Код здесь для внедрения HTML в новую страницу

  //Код для отображения страницы, на которую идет навигация

  //Код для скрытия всех других страниц

};

Если вы хотите проверить наличие существующего контента, вы можете использовать что-то вроде этого:

var numberOfChildNodes = document
              .getElementById(elementOfPage).childNodes.length;

if (numberOfChildNodes === 0) {
  google.script.run
    .withSuccessHandler(injectNewHtml)
    .navigateTo('EditUsers');
};

Ответ или решение

Чтобы эффективно навигировать по HTML-страницам с помощью отдельного скрипта Google Apps, необходимо учитывать несколько ключевых моментов. Мы рассмотрим, как правильно организовать переходы между страницами, используя HTMLService и встроенные функции Google Apps Script.

Основные шаги для навигации по HTML-страницам в Google Apps Script

1. Создание начальной страницы

В вашем Code.gs необходимо установить начальную страницу приложения. Это можно сделать с использованием функции doGet(). Ваш код выглядит корректно, но необходимо скорректировать код функции navigateTo, чтобы он возвращал HTML-код страницы, а не просто файл.

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

function navigateTo(page) {
    return HtmlService.createHtmlOutputFromFile(page)
        .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

2. Создание HTML-страницы

Ваша HTML-страница должна содержать JavaScript, который будет обрабатывать навигацию. Рассмотрим, как вы можете использовать google.script.run для передачи запроса на сервер и обработки ответа.

<!DOCTYPE html>
<html>
<head>
    <base target="_top">
    <script>
        function handleNavigation(page) {
            google.script.run
                .withSuccessHandler(injectNewHtml)
                .navigateTo(page);
        }

        function injectNewHtml(html) {
            document.getElementById('content').innerHTML = html;
        }
    </script>
</head>
<body>
    <h1>Home</h1>
    <div id="content">
        <!-- Контент будет загружен сюда -->
        This is the beginning of the Project Status Web App
    </div>
    <a href="#" onclick="handleNavigation('EditUsers.html')">Edit Users</a><br>
    <a href="#" onclick="handleNavigation('EditProjects.html')">Edit Projects</a><br>
    <a href="#" onclick="handleNavigation('ViewProjectStatuses.html')">View Project Statuses</a><br>
</body>
</html>

3. Обработка навигации

Функция handleNavigation принимает имя страницы, которая будет загружена по клику на ссылку. Вызывается google.script.run.navigateTo(), чтобы получить соответствующий HTML-код. Затем полученный HTML вставляется в элемент с идентификатором content на странице.

4. Использование колбэков

Когда вы вызываете метод google.script.run, рекомендуется использовать withSuccessHandler для получения данных от сервера и управления отображением содержимого. Как показано выше, результат выполнения функции navigateTo попадает в функцию injectNewHtml, которая обновляет DOM.

Дополнительные рекомендации

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

  • Структура HTML: Подумайте о более структурированном подходе к организации вашего HTML-кода, возможно, с использованием <div> для различных секций, что упростит управление контентом.

Заключение

Эти рекомендации и примеры кода помогут вам наладить навигацию по страницам в веб-приложении Google Apps Script. Основываясь на приведённых выше методах, вы сможете создать интуитивно понятный интерфейс для пользователей. Наличие хорошо организованного кода и четкой структуры HTML позволит вашему приложению работать эффективно и быстро, обеспечивая пользователям наилучший опыт работы с вашим веб-приложением.

Оцените материал
Добавить комментарий

Капча загружается...