Para proteger os usuários contra HTML ou JavaScript maliciosos, o Apps Script usa iframes para colocar em sandbox apps da Web do serviço HTML ou interfaces personalizadas para Documentos, Planilhas e Formulários Google. O serviço HTML não usa um sandbox em outras situações, como 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 o IFRAME
. Os apps que usam modos de sandbox mais antigos agora usam automaticamente o modo IFRAME
mais recente. Se você tiver 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
não tem mais efeito quando é chamado.
Restrições no modo IFRAME
O modo sandbox IFRAME
é baseado no recurso de colocação em sandbox de iframe 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.
Definir o atributo de destino do link
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.