Service HTML: restrictions

Pour empêcher les utilisateurs de recevoir des codes HTML ou JavaScript malveillants, Apps Script utilise des iFrames pour mettre en bac à sable les applications Web des 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 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 bac à sable utilisent désormais automatiquement le nouveau mode IFRAME. Si vous avez des 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 avec le 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 iFrame de 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.

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 "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>

HTTPS requis pour le contenu actif

Les contenus"actifs" tels que les scripts, les feuilles de style externes et les requêtes XmlHttpRequests doivent être chargés via HTTPS, et non via HTTP.