Чтобы защитить пользователей от вредоносного HTML-кода или JavaScript, Apps Script использует iframes для изоляции веб-приложений 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.