Apps Script использует безопасную изолированную среду для обеспечения изоляции приложений Google Workspace в определённых ситуациях. Все режимы изолированной среды, за исключением IFRAME
, теперь не поддерживаются. Приложения, использующие старые режимы изолированной среды, теперь автоматически используют новый режим IFRAME
.
Приложениям, которые ранее использовали эти старые режимы с HTML Service, возможно, потребуется внести изменения для режима IFRAME
, чтобы устранить следующие различия:
- Теперь необходимо переопределить
target
атрибут ссылки, используяtarget="_top"
илиtarget="_blank"
- HTML-файлы, обслуживаемые службой HTML, должны включать теги <!DOCTYPE html>, <html> и <body>.
- Собственная библиотека загрузчика Google
api.js
не загружается автоматически в режимеIFRAME
- Пользователям Picker необходимо вызвать
setOrigin()
поскольку контент предоставляется с нового домена. - Некоторые старые браузеры, включая IE9, не поддерживаются.
- Импортированные ресурсы теперь должны использовать HTTPS.
- Отправка форм больше не запрещена по умолчанию.
Эти различия подробно описаны в следующих разделах.
Установка атрибута цели ссылки
В режиме IFRAME
необходимо установить атрибут цели ссылки на _top
или _blank
:
Код.js
function doGet() {
var template = HtmlService.createTemplateFromFile('top');
return template.evaluate();
}
топ.html
<!DOCTYPE html>
<html>
<body>
<div>
<a href="http://google.com" target="_top">Click Me!</a>
</div>
</body>
</html>
Вы также можете переопределить этот атрибут, используя тег <base> в разделе заголовка веб-страницы:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
HTML-теги верхнего уровня
В режиме песочницы NATIVE
(и EMULATED
) определенные HTML-теги будут автоматически добавлены в файл Apps Script .html, но этого не происходит при использовании режима IFRAME
.
Чтобы убедиться, что страницы вашего проекта корректно отображаются с использованием IFRAME
, заключите содержимое вашей страницы в следующие теги верхнего уровня:
<!DOCTYPE html>
<html>
<body>
<!-- Add your HTML content here -->
</body>
</html>
Собственная библиотека загрузчика Javascript должна быть загружена явно.
Скрипты, которые полагаются на автоматическую загрузку собственной библиотеки загрузчика api.js
необходимо изменить для явной загрузки этой библиотеки, как в следующем примере:
<script src="https://apis.google.com/js/api.js?onload=onApiLoad">
</script>
Изменение API Google Picker
При использовании API Google Picker теперь необходимо вызвать setOrigin()
при построении PickerBuilder и передать источник google.script.host.origin
, как показано в следующем примере:
function createPicker(oauthToken) {
var picker = new google.picker.PickerBuilder()
.addView(google.picker.ViewId.SPREADSHEETS) // Or a different ViewId
.setOAuthToken(oauthToken)
.setDeveloperKey(developerKey)
.setCallback(pickerCallback)
.setOrigin(google.script.host.origin) // Note the setOrigin
.build();
picker.setVisible(true);
}
Полный рабочий пример смотрите в разделе Диалоги открытия файлов .
Поддержка браузеров
Режим песочницы IFRAME
основан на функции песочницы iframe в HTML5. Она не поддерживается в некоторых старых браузерах, например, Internet Explorer 9. Это может привести к проблемам, если ваш проект Apps Script:
- использует
HtmlService
и - ранее использовавшаяся
EMULATED
илиNATIVE
песочница
Перенос этих приложений в режим песочницы IFRAME
означает, что они могут перестать работать в некоторых старых браузерах (в частности, IE9 и более ранних версиях), которые не поддерживают функцию песочницы iframe HTML5.
Приложения, которые уже запрашивают режим IFRAME
или вообще не используют HtmlService
, не подвержены этой проблеме.
Для импортируемых ресурсов теперь требуется HTTPS
Предыдущие приложения, импортировавшие ресурсы с помощью HTTP, необходимо изменить так, чтобы они использовали HTTPS.
Отправка форм больше не запрещена по умолчанию.
В режиме NATIVE
-песочницы HTML-формы не могли отправлять данные и осуществлять навигацию по странице. Благодаря этому разработчик мог просто добавить обработчик onclick
к кнопке «Отправить» и не беспокоиться о том, что произойдёт дальше.
Однако в режиме IFRAME
HTML-формы могут быть отправлены, и если у элемента формы не указан атрибут action
, он будет отправлен на пустую страницу. Хуже того, внутренний iframe перенаправит на пустую страницу до того, как обработчик onclick
успеет завершить работу.
Решением является добавление на страницу кода JavaScript, который предотвращает фактическую отправку элементов формы, чтобы обработчики кликов успели сработать:
<script>
// Prevent forms from submitting.
function preventFormSubmit() {
var forms = document.querySelectorAll('form');
for (var i = 0; i < forms.length; i++) {
forms[i].addEventListener('submit', function(event) {
event.preventDefault();
});
}
}
window.addEventListener('load', preventFormSubmit);
</script>
Полный пример можно найти в руководстве HtmlService «Клиент-серверное взаимодействие» .