Serviço HTML: Restrições

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

Modo sandbox

Com exceção do IFRAME, todos os modos de sandbox foram descontinuados. Os apps que usavam os modos NATIVE ou EMULATED agora usam automaticamente o modo IFRAME. Se o script foi desenvolvido com um modo mais antigo, siga as instruções de migração para garantir que ele funcione corretamente.

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

Restrições no modo IFRAME

O modo sandbox IFRAME é baseado no recurso de iframe sandbox em 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 independente.

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

No modo IFRAME, defina 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>

HTTPS obrigatório para conteúdo ativo

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