HTML-Dienst: Einschränkungen

Damit Nutzern kein schädlicher HTML- oder JavaScript-Code angezeigt wird, nutzt Apps Script iFrames, um Sandbox-Webanwendungen für HTML-Dienste oder benutzerdefinierte Benutzeroberflächen für Google Docs, Google Tabellen und Google Formulare in einer Sandbox auszuführen. In anderen Situationen, z. B. beim Generieren des Texts einer E-Mail, wird vom HTML-Dienst keine Sandbox verwendet. Die Sandbox schränkt den clientseitigen Code ein.

Sandbox Mode

Alle Sandbox-Modi mit Ausnahme von IFRAME wurden eingestellt. Anwendungen, die ältere Sandbox-Modi nutzen, nutzen jetzt automatisch den neueren IFRAME-Modus. Wenn Sie Skripts haben, die in den älteren Modi (NATIVE und EMULATED) entwickelt wurden, folgen Sie der Migrationsanleitung, 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 iFrame-Sandbox-Funktion in HTML5. Dabei werden die folgenden Schlüsselwörter verwendet:

  • 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 Keyword allow-top-navigation, mit dem der Inhalt im Browserkontext der obersten Ebene navigieren kann, ist eingeschränkt und kann in der Sandbox nicht als Attribut festgelegt werden. Wenn Sie Ihr Script weiterleiten müssen, fügen Sie stattdessen einen Link oder eine Schaltfläche hinzu, über die der Nutzer eine Aktion ausführen kann.

Im IFRAME-Modus 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>

Du kannst dieses Attribut auch mit dem Tag <base> im Abschnitt „head“ 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>

Für aktive Inhalte ist HTTPS erforderlich

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