Чтобы защитить пользователей от вредоносного кода HTML или JavaScript, Apps Script использует iframe для изолирования веб-приложений службы HTML или настраиваемых пользовательских интерфейсов для Google Docs, Sheets и Forms. (Служба 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-top-navigation
, которое позволяет содержимому перемещаться по контексту просмотра верхнего уровня, ограничено и не устанавливается в качестве атрибута в песочнице. Если вам нужно перенаправить свой скрипт, добавьте вместо этого ссылку или кнопку, чтобы пользователь мог действовать.
Установка атрибута цели ссылки
В режиме IFRAME
вам необходимо установить для атрибута цели ссылки значение _top
или _blank
:
Код.js
function doGet() {
var template = HtmlService.createTemplateFromFile('top');
return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
топ.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.