Pour protéger les utilisateurs contre l'affichage de code HTML ou JavaScript malveillant, Apps Script utilise des iFrames pour insérer dans un bac à sable des applications Web de services 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 pour générer le corps d'un e-mail.) Le bac à sable impose des limites au code côté client.
Mode bac à sable
Tous les modes Sandbox 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 mode IFRAME
le plus récent. Si vous avez des scripts développés avec les 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 plus d'effet lorsqu'elle est appelée.
Restrictions en mode IFRAME
Le mode bac à sable IFRAME
est basé sur la fonctionnalité de bac à sable iFrame de HTML5, utilisant les 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 sur lequel l'utilisateur pourra intervenir.
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().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 l'en-tête de la page Web d'origine:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
HTTPS requis pour le contenu actif
Le contenu"actif", tel que les scripts, les feuilles de style externes et les requêtes XmlHttpRequest, doit être chargé via HTTPS, et non HTTP.