HTML-Dienst: Einschränkungen

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

Sandbox-Modus

Alle Sandbox-Modi werden eingestellt, mit Ausnahme von IFRAME. Bei Apps, die ältere Sandbox-Modi verwenden, wird jetzt automatisch der neuere IFRAME-Modus verwendet. Wenn Sie Scripts haben, die mit den älteren Modi (NATIVE und EMULATED) entwickelt wurden, sollten Sie der Anleitung zur Migration folgen, damit sie im Modus IFRAME ordnungsgemäß funktionieren.

Die Methode setSandboxMode hat beim Aufrufen jetzt keine Auswirkungen mehr.

Einschränkungen im IFRAME-Modus

Der IFRAME-Sandbox-Modus basiert auf der iFrame-Sandboxing-Funktion in HTML5 und verwendet die folgenden Keywords:

  • 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 wird nur für eigenständige Scriptprojekte 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 Script umleiten möchten, fügen Sie stattdessen einen Link oder eine Schaltfläche hinzu, über die Nutzer eine Aktion ausführen können.

Im IFRAME-Modus müssen Sie das Attribut „Linkziel“ 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 <base>-Tag im Head-Abschnitt der umschließ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.