Para proteger os usuários contra a exibição de HTML ou JavaScript malicioso, o Apps Script usa iframes para colocar no sandbox apps da Web de serviços HTML ou para usuários interfaces para os apps 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
. Apps que usam sandbox mais antigo
agora usam o modo IFRAME
mais recente automaticamente. Se você tiver scripts que
foram desenvolvidos usando os modos mais antigos (NATIVE
e EMULATED
), você deve
siga as instruções de migração para garantir
elas funcionam corretamente no modo IFRAME
.
O setSandboxMode
agora não tem efeito quando chamado.
Restrições no modo IFRAME
O modo sandbox IFRAME
é baseado no
Recurso 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 independentes.
A palavra-chave allow-top-navigation
, que permite que o conteúdo navegue pelo
contexto de navegação de nível superior, é restrito e não é definido como um atributo no
sandbox Se for preciso redirecionar seu script, adicione um link ou botão para a
que o usuário tome uma atitude.
Definir o atributo de destino do link
No modo IFRAME
, é preciso 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>
Você também pode substituir esse atributo usando a tag <base>
no cabeçalho
da página da Web associada:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
É necessário HTTPS para o conteúdo ativo
"Ativo" conteúdo scripts, folhas de estilo externas e XmlHttpRequests devem ser carregados HTTPS, e não HTTP.