Apps Script utilise un bac à sable de sécurité pour isoler les applications Google Workspace
dans certaines situations. Tous les modes bac à sable sont désormais arrêtés, à l'exception de IFRAME
. Les applications qui utilisent d'anciens modes bac à sable utilisent désormais automatiquement le nouveau mode IFRAME
.
Les applications qui utilisaient auparavant ces anciens modes avec le service HTML devront peut-être apporter des modifications au mode IFRAME
afin de corriger les différences suivantes:
- Vous devez maintenant remplacer l'attribut
target
du lien à l'aide detarget="_top"
outarget="_blank"
- Les fichiers HTML diffusés par le service HTML doivent inclure des balises <!DOCTYPE html>, <html> et <body>.
- La bibliothèque de chargeurs native Google
api.js
ne se charge pas automatiquement en modeIFRAME
- Les utilisateurs du sélecteur doivent appeler
setOrigin()
, car le contenu est diffusé à partir d'un nouveau domaine. - Certains navigateurs plus anciens, dont IE9, ne sont pas compatibles
- Les ressources importées doivent désormais utiliser HTTPS
- L'envoi de formulaires n'est plus bloqué par défaut
Ces différences sont détaillées dans les sections suivantes.
Définir l'attribut cible du lien
En mode IFRAME
, vous devez définir l'attribut cible du lien sur _top
ou _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>
Vous pouvez également remplacer cet attribut à l'aide de la balise <base> dans la section "head" de la page Web qui l'inclut:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
Balises HTML de premier niveau
En mode bac à sable NATIVE
(et EMULATED
), certaines balises HTML sont automatiquement ajoutées à un fichier .html Apps Script, mais cela ne se produit pas lorsque vous utilisez le mode IFRAME
.
Pour vous assurer que les pages de votre projet sont correctement diffusées à l'aide de IFRAME
, encapsulez le contenu de vos pages dans les balises de premier niveau suivantes:
<!DOCTYPE html>
<html>
<body>
<!-- Add your HTML content here -->
</body>
</html>
La bibliothèque de chargeur JavaScript native doit être chargée explicitement
Les scripts qui s'appuyaient sur le chargement automatique de la bibliothèque de chargeurs native api.js
doivent être modifiés pour charger cette bibliothèque explicitement, comme dans l'exemple suivant:
<script src="https://apis.google.com/js/api.js?onload=onApiLoad">
</script>
Modification de l'API Google Picker
Lorsque vous utilisez l'API Google Picker, vous devez maintenant appeler setOrigin()
lors de la construction de PickerBuilder et transmettre le google.script.host.origin
d'origine, comme illustré dans l'exemple suivant:
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);
}
Pour obtenir un exemple fonctionnel complet, consultez la section Boîtes de dialogue d'ouverture de fichier.
Prise en charge des navigateurs
Le mode bac à sable IFRAME
est basé sur la fonctionnalité de bac à sable iFrame de HTML5.
Cette fonctionnalité n'est pas prise en charge dans certains navigateurs plus anciens, tels qu'Internet Explorer 9. Cela peut poser un problème si votre projet Apps Script:
- utilise
HtmlService
, et - Vous avez déjà utilisé le bac à sable
EMULATED
ouNATIVE
Si vous migrez ces applications vers le mode bac à sable IFRAME
, il est possible qu'elles ne fonctionnent plus sur certains navigateurs plus anciens (notamment IE9 et versions antérieures) qui ne sont pas compatibles avec la fonctionnalité de bac à sable iFrame HTML5.
Les applications qui demandent déjà le mode IFRAME
ou qui n'utilisent pas du tout HtmlService
ne sont pas affectées par ce problème.
HTTPS est désormais requis pour les ressources importées
Les applications précédentes qui importaient des ressources à l'aide du protocole HTTP doivent être modifiées de manière à utiliser HTTPS à la place.
L'envoi de formulaires n'est plus bloqué par défaut
Sous NATIVE
, les formulaires HTML de bac à sable ne pouvaient pas envoyer ni naviguer dans la page. Ainsi, un développeur peut simplement ajouter un gestionnaire onclick
au bouton "Submit" (Envoyer) sans avoir à se soucier de ce qui s'est passé par la suite.
Avec le mode IFRAME
, les formulaires HTML peuvent être envoyés. Si aucun attribut action
n'est spécifié pour un élément du formulaire, il est envoyé sur une page vierge.
Pire encore, l'iFrame interne redirigera vers la page vierge avant que le gestionnaire onclick
n'ait pu terminer.
La solution consiste à ajouter à votre page un code JavaScript qui empêche l'envoi réel des éléments du formulaire, afin que les gestionnaires de clics aient le temps de fonctionner:
<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>
Vous trouverez un exemple complet dans le guide HTMLService Communication entre clients et serveurs.