Служба HTML: ограничения

Чтобы защитить пользователей от вредоносного 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.