Apps Script utilise un bac à sable de sécurité
pour assurer une isolation protectrice Google Workspace
dans certaines situations. Tout
Les modes bac à sable sont désormais arrêtés, sauf pour IFRAME
. Applications utilisant l'ancienne version de 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 pour le mode IFRAME
afin de prendre en compte 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 <!DOCTYPE html>, <html> et <body> tags
- La bibliothèque de chargeurs Google native
api.js
ne se charge pas automatiquement dans ModeIFRAME
- Les utilisateurs de l'outil de sélection 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 en utilisant la balise <base> dans l'en-tête de la page Web correspondante:
<!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
Dans le mode bac à sable NATIVE
(et EMULATED
), certaines balises HTML seraient
est automatiquement ajouté à un fichier .html Apps Script, mais cela ne se produit pas
avec le mode IFRAME
.
Pour vous assurer que les pages de votre projet sont diffusées correctement à l'aide de IFRAME
, encapsulez le contenu de votre page 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
Scripts qui s'appuyaient sur le chargement automatique de la bibliothèque de chargeurs native api.js
doit être modifié 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 création
PickerBuilder et transmettre l'élément google.script.host.origin
d'origine, comme indiqué
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 Boîtes de dialogue d'ouverture de fichier.
Prise en charge des navigateurs
Le mode bac à sable IFRAME
est basé sur
bac à sable iFrame
en HTML5.
Cette fonctionnalité n'est pas prise en charge dans certains navigateurs plus anciens, tels qu'Internet Explorer 9. Ce
peut poser problème si votre projet Apps Script:
- utilise
HtmlService
, et - Vous avez déjà utilisé le bac à sable
EMULATED
ouNATIVE
Si vous migrez ces applis vers le mode bac à sable IFRAME
, il est possible qu'elles ne fonctionnent plus
Certains navigateurs plus anciens (IE9 et versions antérieures) non compatibles avec le format iFrame HTML5
la fonctionnalité de bac à sable.
Les applications qui demandent déjà le mode IFRAME
ou qui n'utilisent pas du tout HtmlService
sont
ne sont pas concernées par ce problème.
HTTPS est désormais requis pour les ressources importées
Les applications précédentes qui ont importé des ressources via HTTP doivent être remplacées par utilisez plutôt HTTPS.
L'envoi de formulaires n'est plus bloqué par défaut
Sous NATIVE
, les formulaires HTML utilisés dans un bac à sable n'ont pas pu envoyer
et naviguer sur la page. Par conséquent, un développeur pourrait simplement ajouter un onclick
au bouton d'envoi et n'ont pas à
se soucier de ce qui s'est passé après.
Avec le mode IFRAME
, l'envoi de formulaires HTML est autorisé, et si un formulaire
n'a pas d'attribut action
spécifié, il renvoie vers une page vierge.
Pire encore, l'iFrame interne redirigera vers la page vierge avant onclick
a une chance de terminer.
La solution consiste à ajouter à votre page du code JavaScript qui empêche le formulaire d'envoyer ces éléments, afin que les gestionnaires de clics aient le temps :
<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 les clients et les serveurs.