Apps Script utilizza un sandbox di sicurezza
per fornire un isolamento protettivo per le applicazioni
Google Workspace in determinate situazioni. Tutte
le modalità sandbox sono state ritirate, ad eccezione di IFRAME
. Le app che utilizzano modalità sandbox precedenti ora utilizzano automaticamente la modalità IFRAME
più recente.
Le app che in precedenza utilizzavano queste modalità precedenti con il servizio HTML potrebbero dover apportare modifiche per la modalità IFRAME
, per risolvere le seguenti differenze:
- Ora devi eseguire l'override dell'attributo
target
del link utilizzandotarget="_top"
otarget="_blank"
- I file HTML pubblicati dal servizio HTML devono includere i tag <!DOCTYPE html>, <html> e <body>.
- La libreria di caricamento nativa di Google
api.js
non viene caricata automaticamente in modalitàIFRAME
- Gli utenti di Picker devono chiamare
setOrigin()
perché i contenuti vengono pubblicati da un nuovo dominio - Alcuni browser meno recenti, tra cui IE9, non sono supportati
- Le risorse importate ora devono utilizzare HTTPS
- L'invio di moduli non viene più impedito per impostazione predefinita
Queste differenze sono descritte in dettaglio nelle sezioni seguenti.
Impostazione dell'attributo Target dei link
Nella modalità IFRAME
devi impostare l'attributo destinazione link su _top
o _blank
:
Code.js
function doGet() {
var template = HtmlService.createTemplateFromFile('top');
return template.evaluate();
}
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> all'interno della sezione head della pagina web contenitore:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
Tag HTML di primo livello
In modalità sandbox NATIVE
(e EMULATED
), alcuni tag HTML vengono aggiunti automaticamente a un file .html di Apps Script, ma ciò non accade quando si utilizza la modalità IFRAME
.
Per assicurarti che le pagine del progetto vengano pubblicate correttamente utilizzando IFRAME
, racchiudi i contenuti della pagina nei seguenti tag di primo livello:
<!DOCTYPE html>
<html>
<body>
<!-- Add your HTML content here -->
</body>
</html>
La libreria di caricamento JavaScript nativa deve essere caricata in modo esplicito
Gli script che si basavano sul caricamento automatico della libreria del caricatore nativo api.js
devono essere modificati per caricare questa libreria in modo esplicito, come nel seguente esempio:
<script src="https://apis.google.com/js/api.js?onload=onApiLoad">
</script>
Modifica dell'API Google Picker
Quando utilizzi l'API Google Picker, ora devi chiamare setOrigin()
durante la costruzione
di PickerBuilder e passare l'origine google.script.host.origin
, come mostrato
nell'esempio seguente:
function createPicker(oauthToken) {
var picker = new google.picker.PickerBuilder()
.addView(google.picker.ViewId.SPREADSHEETS) // Or a different ViewId
.setOAuthToken(oauthToken)
.setDeveloperKey(developerKey)
.setCallback(pickerCallback)
.setOrigin(google.script.host.origin) // Note the setOrigin
.build();
picker.setVisible(true);
}
Per un esempio completo e funzionante, consulta Finestre di dialogo di apertura dei file.
Supporto browser
La modalità sandbox IFRAME
si basa sulla
funzionalità di sandbox iframe
in HTML5.
Questa funzionalità non è supportata in alcuni browser meno recenti, come Internet Explorer 9. Questo
può essere un problema se il tuo progetto Apps Script:
- utilizza
HtmlService
e - sandboxing
EMULATED
oNATIVE
utilizzato in precedenza
La migrazione di queste app alla modalità sandbox di IFRAME
significa che potrebbero non funzionare più su
alcuni browser meno recenti (in particolare IE9 e versioni precedenti) che non supportano la funzionalità
sandbox iframe di HTML5.
Le app che richiedono già la modalità IFRAME
o che non utilizzano affatto HtmlService
non sono interessate da questo problema.
Ora l'HTTPS è obbligatorio per le risorse importate
Le applicazioni precedenti che importavano risorse utilizzando HTTP devono essere modificate per utilizzare HTTPS.
L'invio di moduli non viene più impedito per impostazione predefinita
In NATIVE
, l'esecuzione in sandbox dei moduli HTML ha impedito l'invio
e la navigazione della pagina. In questo modo, uno sviluppatore potrebbe semplicemente aggiungere un gestore onclick
al pulsante di invio e non doversi preoccupare di ciò che accade dopo.
Con la modalità IFRAME
, tuttavia, l'invio dei moduli HTML è consentito e, se un elemento del modulo non ha specificato l'attributo action
, verrà inviato a una pagina vuota.
Ancora peggio, l'iframe interno reindirizzerà alla pagina vuota prima che il gestore onclick
abbia la possibilità di terminare.
La soluzione consiste nell'aggiungere alla pagina un codice JavaScript che impedisca l'invio effettivo degli elementi del modulo, in modo che i gestori dei clic abbiano il tempo di funzionare:
<script>
// Prevent forms from submitting.
function preventFormSubmit() {
var forms = document.querySelectorAll('form');
for (var i = 0; i < forms.length; i++) {
forms[i].addEventListener('submit', function(event) {
event.preventDefault();
});
}
}
window.addEventListener('load', preventFormSubmit);
</script>
Un esempio completo è disponibile nella guida HtmlService Comunicazione da client a server.