Per impedire agli utenti di ricevere codice HTML o JavaScript dannoso, Apps Script utilizza gli iframe per sandbox app web di servizi HTML o interfacce utente personalizzate per Documenti, Fogli e Moduli Google. Il servizio HTML non utilizza una sandbox in altre situazioni, ad esempio generando il corpo di un'email. La sandbox impone delle limitazioni al codice lato client.
Modalità sandbox
Tutte le modalità sandbox sono state ritirate ad eccezione di IFRAME
. Le app che usano modalità sandbox precedenti ora usano automaticamente la modalità IFRAME
più recente. Se disponi di script
sviluppati utilizzando le modalità precedenti (NATIVE
e EMULATED
), devi
seguire le istruzioni per la migrazione per assicurarti
che funzionino correttamente nella modalità IFRAME
.
Il metodo setSandboxMode
ora non ha alcun effetto quando viene chiamato.
Limitazioni in modalità IFRAME
La modalità sandbox IFRAME
si basa sulla funzionalità di sandboxing di iframe in HTML5, utilizzando le seguenti parole chiave:
allow-same-origin
allow-forms
allow-scripts
allow-popups
allow-downloads
allow-modals
allow-popups-to-escape-sandbox
allow-top-navigation-by-user-activation
- Questo attributo è impostato solo per i progetti di script autonomi.
La parola chiave allow-top-navigation
, che consente ai contenuti di esplorare il contesto di navigazione di primo livello, è limitata e non è impostata come attributo nella sandbox. Se devi reindirizzare lo script, aggiungi un link o un pulsante
su cui l'utente possa agire.
Impostare l'attributo di destinazione del link
In modalità IFRAME
, devi impostare l'attributo di destinazione del link su
_top
o _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>
Puoi anche sostituire questo attributo utilizzando il tag <base>
nella sezione head
della pagina web che lo contiene:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
HTTPS richiesto per contenuti attivi
I contenuti"attivi", come script, fogli di stile esterni e XmlHttpRequests, devono essere caricati tramite HTTPS, non tramite HTTP.