Pour protéger les utilisateurs contre les codes HTML ou JavaScript malveillants, le service HTML utilise des iFrames pour mettre en bac à sable les applications Web ou les interfaces utilisateur personnalisées pour Google Docs, Google 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
À l'exception de IFRAME, tous les modes bac à sable sont abandonnés. Les applications qui utilisaient auparavant les modes NATIVE ou EMULATED utilisent désormais automatiquement le mode IFRAME. Si votre script a été développé avec un ancien mode, suivez les
instructions de migration pour vous assurer qu'il fonctionne
correctement.
La setSandboxMode
méthode n'a désormais aucun effet lorsqu'elle est appelée.
Restrictions en mode IFRAME
allow-same-originallow-formsallow-scriptsallow-popupsallow-downloadsallow-modalsallow-popups-to-escape-sandboxallow-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 comme attribut dans le bac à sable. Si vous devez rediriger votre script, ajoutez plutôt un lien ou un bouton sur lequel l'utilisateur pourra agir.
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 la section d'en-tête
de la page Web contenant le code :
<!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 XmlHttpRequests, doit être chargé via HTTPS, et non HTTP.