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.
Attribut „Linkziel“ festlegen
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.