Pour protéger les utilisateurs contre le code HTML ou JavaScript malveillant, Apps Script utilise des iFrames pour mettre en bac à sable des applications Web de service HTML ou des interfaces utilisateur personnalisées pour Google Docs, Sheets et Forms. (Le service HTML n'utilise pas de bac à sable dans d'autres situations, par exemple lors de la génération du corps d'un e-mail.) Le bac à sable impose des limites au code côté client.
Mode bac à sable
Tous les modes bac à sable sont désormais arrêtés, à l'exception de IFRAME
. Les applications qui utilisent d'anciens modes de bac à sable utilisent désormais automatiquement le nouveau mode IFRAME
. Si vous disposez de scripts développés à l'aide des anciens modes (NATIVE
et EMULATED
), vous devez suivre les instructions de migration pour vous assurer qu'ils fonctionnent correctement en mode IFRAME
.
La méthode setSandboxMode
n'a désormais aucun effet lorsqu'elle est appelée.
Restrictions en mode IFRAME
Le mode bac à sable IFRAME
est basé sur la fonctionnalité de bac à sable d'iFrame en HTML5, à l'aide des mots clés suivants:
allow-same-origin
allow-forms
allow-scripts
allow-popups
allow-downloads
allow-modals
allow-popups-to-escape-sandbox
allow-top-navigation-by-user-activation
: cet attribut n'est défini que pour les projets de script autonomes.
Le mot clé allow-top-navigation
, qui permet au contenu de naviguer dans son contexte de navigation de premier niveau, est limité et n'est pas défini en tant qu'attribut dans le bac à sable. Si vous devez rediriger votre script, ajoutez un lien ou un bouton permettant à l'utilisateur d'effectuer une action à la place.
Définir l'attribut de cible du lien
En mode IFRAME
, vous devez définir l'attribut de cible du lien sur _top
ou _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>
Vous pouvez également remplacer cet attribut à l'aide de la balise <base>
dans la section "head" de la page Web englobante:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
HTTPS obligatoire pour le contenu actif
Le contenu"actif", comme les scripts, les feuilles de style externes et les XmlHttpRequests, doit être chargé via HTTPS, et non HTTP.