Um Nutzer vor schädlichem HTML- oder JavaScript-Code zu schützen, verwendet Apps Script iFrames, um HTML-Dienst-Webanwendungen in einer Sandbox oder benutzerdefinierte Benutzeroberflächen für Google Docs, Google Tabellen und Google Formulare zu erstellen. In anderen Situationen, z. B. beim Generieren des Texts einer E-Mail, verwendet der HTML-Dienst keine Sandbox. Die Sandbox schränkt clientseitigen Code ein.
Sandbox Mode
Alle Sandbox-Modi mit Ausnahme von IFRAME
werden jetzt eingestellt. Anwendungen, die ältere Sandbox-Modi verwenden, nutzen jetzt automatisch den neueren IFRAME
-Modus. 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, wenn sie aufgerufen wird.
Einschränkungen im IFRAME-Modus
Der Sandbox-Modus IFRAME
basiert auf der Funktion iFrame-Sandboxing in HTML5 und verwendet die folgenden Schlüsselwörter:
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 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 Skript weiterleiten müssen, fügen Sie einen Link oder eine Schaltfläche hinzu, über die der Nutzer stattdessen Aktionen ausführen kann.
Attribut „Linkziel“ festlegen
Im Modus IFRAME
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>
Sie können dieses Attribut auch mit dem Tag <base>
im <head>-Abschnitt 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>
HTTPS für aktive Inhalte erforderlich
"Aktive" Inhalte wie Skripts, externe Stylesheets und XmlHttpRequests müssen über HTTPS und nicht über HTTP geladen werden.