HTML-Dienst: Einschränkungen

Um Nutzer vor schädlichem HTML oder JavaScript zu schützen, verwendet Apps Script iFrames, um HTML-Service-Web-Apps oder benutzerdefinierte Benutzeroberflächen für Google Docs, Sheets und Forms in einer Sandbox auszuführen. Der HTML-Dienst verwendet in anderen Situationen keine Sandbox, z. B. beim Generieren des E-Mail-Texts. In der Sandbox gelten Einschränkungen für clientseitigen Code.

Sandbox-Modus

Alle Sandbox-Modi mit Ausnahme von IFRAME werden eingestellt. Apps, die ältere Sandbox-Modi verwenden, nutzen jetzt automatisch den neueren Modus IFRAME. 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 mehr, wenn sie aufgerufen wird.

Einschränkungen im IFRAME-Modus

Der IFRAME-Sandbox-Modus basiert auf dem HTML5-Feature iFrame-Sandboxing 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 Browsing-Kontext 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 ein, über die der Nutzer eine Aktion ausführen kann.

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-Bereich der umgebenden 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.