HTML-Dienst: Einschränkungen

Um Nutzer vor schädlichem HTML- oder JavaScript-Code zu schützen, verwendet Apps Script iFrames, um HTML-Dienst-Webanwendungen in einer Sandbox oder benutzerdefinierte Benutzeroberflächen für Google Docs, Google Tabellen und Google Formulare zu erstellen. In anderen Situationen, z. B. beim Generieren des Texts einer E-Mail, verwendet der HTML-Dienst keine Sandbox. Die Sandbox schränkt clientseitigen Code ein.

Sandbox Mode

Alle Sandbox-Modi mit Ausnahme von IFRAME werden jetzt eingestellt. Anwendungen, die ältere Sandbox-Modi verwenden, nutzen jetzt automatisch den neueren IFRAME-Modus. Wenn Sie Skripts haben, die mit den älteren Modi (NATIVE und EMULATED) entwickelt wurden, sollten Sie der Migrationsanleitung folgen, damit sie im IFRAME-Modus ordnungsgemäß funktionieren.

Die Methode setSandboxMode hat jetzt keine Auswirkungen, wenn sie aufgerufen wird.

Einschränkungen im IFRAME-Modus

Der Sandbox-Modus IFRAME basiert auf der Funktion iFrame-Sandboxing in HTML5 und verwendet die folgenden Schlüsselwörter:

  • allow-same-origin
  • allow-forms
  • allow-scripts
  • allow-popups
  • allow-downloads
  • allow-modals
  • allow-popups-to-escape-sandbox
  • allow-top-navigation-by-user-activation: Dieses Attribut ist nur für eigenständige Skriptprojekte festgelegt.

Das Schlüsselwort allow-top-navigation, mit dem Inhalte im Browserkontext auf oberster Ebene navigieren können, ist eingeschränkt und nicht als Attribut in der Sandbox festgelegt. Wenn Sie Ihr Skript weiterleiten müssen, fügen Sie einen Link oder eine Schaltfläche hinzu, über die der Nutzer stattdessen Aktionen ausführen kann.

Im Modus IFRAME müssen Sie das Linkzielattribut auf _top oder _blank festlegen:

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>

Sie können dieses Attribut auch mit dem Tag <base> im <head>-Abschnitt der einschließenden Webseite überschreiben:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
   <div>
     <a href="http://google.com">Click Me!</a>
   </div>
 </body>
</html>

HTTPS für aktive Inhalte erforderlich

"Aktive" Inhalte wie Skripts, externe Stylesheets und XmlHttpRequests müssen über HTTPS und nicht über HTTP geladen werden.