Serviço HTML: Restrições

Para proteger os usuários contra HTML ou JavaScript maliciosos, o Apps Script usa iframes em apps da Web de serviços de HTML no sandbox ou interfaces de usuário personalizadas para os Documentos, Planilhas e Formulários Google. O serviço HTML não usa um sandbox em outras situações, como na geração do 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 de sandbox mais antigos agora usam o modo IFRAME mais recente automaticamente. Se você tiver scripts 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 sandbox de 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 só é definido para projetos de script independentes.

A palavra-chave allow-top-navigation, que permite que o conteúdo navegue pelo contexto de navegação de nível superior, é restrita e não é definida como um atributo no sandbox. Se você precisar redirecionar o script, adicione um link ou um botão para que o usuário realize 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 envolvente:

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

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.