Чтобы защитить пользователей от вредоносного HTML или JavaScript, Apps Script использует iframe для изоляции веб-приложений HTML-сервиса или пользовательских интерфейсов для Документов, Таблиц и Форм Google. (Служба HTML не использует песочницу в других ситуациях, например при создании тела электронного письма.) Песочница накладывает ограничения на код на стороне клиента.
Режим песочницы
Все режимы песочницы больше не поддерживаются, за исключением IFRAME
. Приложения, использующие старые режимы песочницы, теперь автоматически используют новый режим IFRAME
. Если у вас есть сценарии, разработанные с использованием старых режимов ( NATIVE
и EMULATED
), вам следует следовать инструкциям по миграции , чтобы убедиться, что они правильно работают в режиме IFRAME
.
Метод setSandboxMode
теперь не оказывает никакого эффекта при вызове.
Ограничения в режиме IFRAME
Режим песочницы IFRAME
основан на функции изолированной программной среды iframe в HTML5 с использованием следующих ключевых слов:
-
allow-same-origin
-
allow-forms
-
allow-scripts
-
allow-popups
-
allow-downloads
-
allow-modals
-
allow-popups-to-escape-sandbox
-
allow-top-navigation-by-user-activation
— этот атрибут устанавливается только для автономных проектов сценариев .
Ключевое словоallow allow-top-navigation
, которое позволяет контенту перемещаться по контексту просмотра верхнего уровня, ограничено и не устанавливается в качестве атрибута в песочнице. Если вам нужно перенаправить скрипт, вместо этого добавьте ссылку или кнопку, по которой пользователь сможет выполнить действие.
Установка атрибута цели ссылки
В режиме IFRAME
вам необходимо установить атрибут цели ссылки на _top
или _blank
:
Код.js
function doGet() {
var template = HtmlService.createTemplateFromFile('top');
return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
top.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>
HTTPS требуется для активного контента
«Активный» контент, такой как сценарии, внешние таблицы стилей и XmlHttpRequests, должен загружаться по протоколу HTTPS, а не HTTP.