Serviço HTML: Restrições

Para proteger os usuários contra a veiculação de HTML ou JavaScript maliciosos, o Apps Script usa iframes para colocar em sandbox apps da Web de serviços HTML ou interfaces do usuário personalizadas para os apps Documentos, Planilhas e Formulários Google. O serviço de HTML não usa um sandbox em outras situações, como para gerar o corpo de um e-mail. O sandbox impõe limitações ao código do lado do cliente.

Modo sandbox

Todos os modos de sandbox foram desativados, exceto IFRAME. Os apps que usam modos sandbox mais antigos agora usam o modo IFRAME mais recente automaticamente. Se você tem scripts que foram desenvolvidos usando os modos mais antigos (NATIVE e EMULATED), siga as instruções de migração para garantir que eles funcionem corretamente no modo IFRAME.

O método setSandboxMode agora não tem efeito quando chamado.

Restrições no modo IFRAME

O modo sandbox IFRAME é baseado no recurso de sandbox do iframe no HTML5, usando as seguintes palavras-chave:

  • allow-same-origin
  • allow-forms
  • allow-scripts
  • allow-popups
  • allow-downloads
  • allow-modals
  • allow-popups-to-escape-sandbox
  • allow-top-navigation-by-user-activation: esse atributo é definido apenas para projetos de script autônomos.

A palavra-chave allow-top-navigation, que permite ao conteúdo navegar no contexto de navegação de nível superior, é restrita e não está definida como um atributo no sandbox. Se você precisar redirecionar seu script, adicione um link ou um botão para o usuário realizar uma ação.

No modo IFRAME, é necessário definir o atributo de destino do link como _top ou _blank:

Code.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>

Também é possível substituir esse atributo usando a tag <base> na seção "head" da página da Web:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
   <div>
     <a href="http://google.com">Click Me!</a>
   </div>
 </body>
</html>

O HTTPS é obrigatório para conteúdo ativo

Conteúdo"ativo", como scripts, folhas de estilo externas e XmlHttpRequests, precisa ser carregado por HTTPS, não HTTP.