HTML-Dienst: Einschränkungen

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

Sandbox-Modus

Mit Ausnahme von IFRAME werden alle Sandbox-Modi eingestellt. In Apps, in denen zuvor die Modi NATIVE oder EMULATED verwendet wurden, wird jetzt automatisch der Modus IFRAME verwendet. Wenn Ihr Skript mit einem älteren Modus entwickelt wurde, folgen Sie der Migrationsanleitung, damit es ordnungsgemäß funktioniert.

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

Einschränkungen im IFRAME-Modus

Der IFRAME Sandbox-Modus basiert auf der iFrame-Sandbox-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 Skriptprojekte festgelegt.

Das Keyword allow-top-navigation, mit dem der Inhalt im Browserkontext der obersten Ebene navigieren kann, ist eingeschränkt und wird nicht als Attribut in der Sandbox festgelegt. Wenn Sie Ihr Skript umleiten müssen, fügen Sie stattdessen einen Link oder eine Schaltfläche hinzu, über die der Nutzer eine Aktion ausführen kann.

Im Modus IFRAME müssen Sie das Attribut für das 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 Bereich 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.