Apps Script utilizza una sandbox per la sicurezza
per fornire un isolamento protettivo per Google Workspace
applicazioni in determinate situazioni. Tutti
Le modalità sandbox sono state ritirate ad eccezione di IFRAME
. App che utilizzano sandbox precedenti
ora usano automaticamente la nuova modalità IFRAME
.
Le app che in precedenza utilizzavano queste modalità meno recenti con il servizio HTML potrebbero dover
Apporta modifiche alla modalità IFRAME
per risolvere le seguenti differenze:
- Ora devi sostituire l'attributo
target
del link utilizzandotarget="_top"
otarget="_blank"
- I file HTML pubblicati dal Servizio HTML devono includere <!DOCTYPE html>, <html> e <body> tag
- La libreria di caricamento nativo di Google
api.js
non si carica automaticamente in ModalitàIFRAME
- Gli utenti del selettore 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 dei moduli non è più impedito per impostazione predefinita
Queste differenze sono descritte in dettaglio nelle sezioni seguenti.
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();
}
top.html
<!DOCTYPE html>
<html>
<body>
<div>
<a href="http://google.com" target="_top">Click Me!</a>
</div>
</body>
</html>
Puoi anche eseguire l'override di questo attributo utilizzando <base> un tag all'interno dell'intestazione della pagina web che le contiene:
<!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 verranno
vengono aggiunti automaticamente a un file .html di Apps Script, ma questo non si verifica quando
utilizzando la modalità IFRAME
.
Per assicurarti che le pagine del progetto vengano pubblicate correttamente con IFRAME
, racchiudi il codice
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
Script basati sul caricamento automatico della libreria di caricamento nativa api.js
deve essere modificato per caricare la libreria in modo esplicito, come nell'esempio seguente:
<script src="https://apis.google.com/js/api.js?onload=onApiLoad">
</script>
Modifica API Google Selecter
Quando utilizzi l'API Google Selecter, ora devi chiamare setOrigin()
durante la creazione
il PickerBuilder e passa l'origine google.script.host.origin
, come mostrato
nel seguente esempio:
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 funzionante, vedi Finestre di dialogo per l'apertura di file.
Supporto browser
La modalità sandbox IFRAME
si basa su
Sandboxing iframe
in HTML5.
Questa operazione non è supportata in alcuni browser meno recenti, come Internet Explorer 9. Questo
può essere un problema se il tuo progetto Apps Script:
- usa
HtmlService
e - sandbox
EMULATED
oNATIVE
utilizzata in precedenza
Se esegui la migrazione di queste app alla modalità sandbox di IFRAME
, potrebbero non funzionare più
alcuni browser meno recenti (soprattutto IE9 e versioni precedenti) che non supportano iframe HTML5
funzionalità di sandboxing.
Le app che richiedono già la modalità IFRAME
o non usano affatto HtmlService
non interessate da questo problema.
Ora è richiesto HTTPS per le risorse importate
Le applicazioni precedenti che importavano risorse tramite HTTP devono essere modificate in utilizzare HTTPS.
L'invio dei moduli non è più impedito per impostazione predefinita
In NATIVE
, è stato impedito l'invio effettivo dei moduli HTML con sandbox
e la navigazione nella pagina. Detto questo, uno sviluppatore potrebbe semplicemente aggiungere un onclick
per l'invio del pulsante di invio, senza doverti preoccupare di quello che è successo dopo.
Con la modalità IFRAME
, tuttavia, è possibile inviare moduli HTML e se un modulo
elemento non ha un attributo action
specificato, pertanto verrà inviato a una pagina vuota.
Peggio ancora, l'iframe interno reindirizzerà alla pagina vuota prima di onclick
ha la possibilità di terminare.
La soluzione consiste nell'aggiungere alla pagina codice JavaScript che impedisca la visualizzazione di inviare elementi effettivamente, in modo che i gestori dei clic abbiano il tempo :
<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>
Puoi trovare un esempio completo nella guida di HTMLService Comunicazione client-server.