Если вы разрабатываете для скрипта пользовательский интерфейс, опубликуйте его как веб-приложение. Например, скрипт, позволяющий пользователям назначать встречи с сотрудниками службы поддержки, лучше всего представить в виде веб-приложения, чтобы пользователи могли получать к нему доступ непосредственно из своих браузеров.
Both standalone scripts and scripts bound to Google Workspace applications can be turned into web apps, so long as they meet the following requirements.
Требования к веб-приложениям
A script can be published as a web app if it meets these requirements:
- Он содержит функции
doGetилиdoPost. - Функция возвращает объект
HtmlOutputслужбы HTML или объектTextOutputслужбы Content .
Параметры запроса
When a user visits an app or a program sends the app an HTTP GET request, Google Apps Script runs the function doGet . When a program sends the app an HTTP POST request, Apps Script runs doPost instead. In both cases, the e argument represents an event parameter that can contain information about any request parameters. The structure of the event object is shown in the following table:
| Поля | |
|---|---|
e.queryString | The value of the query string portion of the URL, or name=alice&n=1&n=2 |
e.parameter | An object of key/value pairs that correspond to the request parameters. Only the first value is returned for parameters that have multiple values. {"name": "alice", "n": "1"} |
e.parameters | An object similar to {"name": ["alice"], "n": ["1", "2"]} |
e.pathInfo | The URL path after |
e.contextPath | Не используется, всегда пустая строка. |
e.contentLength | The length of the request body for POST requests, or 332 |
e.postData.length | Аналогично 332 |
e.postData.type | MIME-тип тела POST-запроса text/csv |
e.postData.contents | Содержимое текста POST-запроса Alice,21 |
e.postData.name | Всегда используется значение "postData" postData |
Pass parameters such as username and age to a URL like the following:
https://script.google.com/.../exec?username=jsmith&age=21
Отобразите параметры следующим образом:
function doGet(e) {
var params = JSON.stringify(e);
return ContentService.createTextOutput(params).setMimeType(ContentService.MimeType.JSON);
}
In the preceding example, doGet returns the following output:
{
"queryString": "username=jsmith&age=21",
"parameter": {
"username": "jsmith",
"age": "21"
},
"contextPath": "",
"parameters": {
"username": [
"jsmith"
],
"age": [
"21"
]
},
"contentLength": -1
}
The following parameter names are reserved by the system and shouldn't be used in URL parameters or POST bodies:
-
c -
sid
Использование этих параметров может привести к ответу HTTP 405 с сообщением об ошибке «Извините, запрошенный вами файл не существует». Если возможно, обновите свой скрипт, используя другие имена параметров.
Разверните скрипт в виде веб-приложения.
Для развертывания скрипта в качестве веб-приложения выполните следующие действия:
- At the top right of the script project, click Deploy > New deployment .
- Next to "Select type," click Enable deployment types > Web app .
- Enter the information about your web app in the fields under "Deployment configuration."
- Нажмите «Развернуть» .
Share the web app URL with those you would like to use your app, provided you have granted them access.
Веб-приложения, развернутые в одном домене, перестают функционировать, если их владельцем становится общий диск или учетная запись в другом домене. Это можно исправить, попросив нового владельца или соавтора повторно развернуть веб-приложение в новом домене. В качестве альтернативы, если веб-приложение переместить обратно в исходный домен, оно снова начнет функционировать в этом домене без повторного развертывания.
Протестируйте развертывание веб-приложения.
To test your script as a web app, follow the steps below:
- At the top right of the script project, click Deploy > Test deployments .
- Next to "Select type," click Enable deployment types > Web app .
- В поле "URL веб-приложения" нажмите "Копировать" .
Paste the URL in your browser and test your web app.
Этот URL-адрес заканчивается на
/devи доступен только пользователям, имеющим права на редактирование скрипта. Данный экземпляр приложения всегда запускает последний сохраненный код и предназначен только для тестирования в процессе разработки.
Для тестирования функции детальной аутентификации OAuth в веб-приложении убедитесь, что в вашем проекте еще нет существующих разрешений. Чтобы аннулировать существующие разрешения, используйте ScriptApp.invalidateAuth . Для веб-приложений, которые уже развернуты и работают под учетной записью активного пользователя , измените поле executeAs в манифесте на USER_DEPLOYING .
При развертывании веб-приложений для запуска от имени разработчика следует проявлять особую осторожность при работе с токенами OAuth, полученными с помощью метода ScriptApp.getOAuthToken . Эти токены могут предоставлять другим приложениям доступ к вашим данным — никогда не передавайте их клиенту.
Разрешения
The permissions for a web app differ depending how you choose to execute the app:
- Execute the app as me —In this case, the script always executes as you, the owner of the script, no matter who accesses the web app.
- Запуск приложения от имени пользователя, обращающегося к веб-приложению — В этом случае скрипт выполняется от имени активного пользователя, использующего веб-приложение. Такой подход к управлению правами доступа приводит к тому, что веб-приложение отображает адрес электронной почты владельца скрипта, когда пользователь авторизует доступ.
Для предотвращения злоупотреблений Apps Script устанавливает ограничения на количество новых пользователей, которые могут авторизовать веб-приложение, запускаемое от имени этого пользователя. Эти ограничения зависят, помимо прочего, от того, является ли издательская учетная запись частью домена Google Workspace .
Совместная работа над веб-приложениями с использованием общего диска . При развертывании веб-приложения на общем диске выбор опции «Выполнять от вашего имени» приводит к выполнению веб-приложения с правами пользователя, который его развернул (поскольку владельца скрипта нет).
Embed your web app in Google Sites {:#embed-web-app}
Встроенные веб-приложения по-прежнему требуют предоставления прав доступа для предотвращения злонамеренного использования. Если ваше встроенное веб-приложение, похоже, не работает, проверьте, позволяют ли его использование права доступа, установленные владельцем веб-приложения и администратором домена.
In order to embed a web app in Sites, it must first be deployed . You also need the Deployed URL from the Deploy dialog.
To embed a web app into a Sites page, follow these steps:
- Open the Sites page where you'd like to add the web app.
- Выберите Вставка > Встроить URL .
- Вставьте URL-адрес веб-приложения и нажмите «ДОБАВИТЬ» .
Веб-приложение отображается во фрейме в предварительном просмотре страницы. После публикации страницы пользователям вашего сайта может потребоваться авторизация веб-приложения перед его нормальным запуском. Неавторизованные веб-приложения запрашивают у пользователя подтверждение авторизации.
Веб-приложения и история браузера
To simulate a multi-page application, or one with a dynamic UI controlled using URL parameters, define a state object to represent the app's UI or page, and push the state into the browser history as the user navigates your app. Listen to history events so that your web app displays the correct UI when the user navigates back and forth with the browser buttons. By querying the URL parameters at load time, have your app dynamically build its UI based on those parameters, allowing the user to start the app in a particular state.
Apps Script предоставляет два асинхронных клиентских JavaScript API для создания веб-приложений, связанных с историей браузера:
google.script.historyпредоставляет методы для динамического реагирования на изменения истории браузера. Это включает в себя: добавление состояний (простых объектов, которые вы определяете) в историю браузера, замену верхнего состояния в стеке истории и установку функции обратного вызова для реагирования на изменения истории.google.script.urlprovides the means to retrieve the current page's URL parameters and URL fragment, if they are present.
These history APIs are only available to web apps. They are not supported for sidebars, dialogs or add-ons. This functionality is also not recommended for use in web apps embedded in a Sites .