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-originallow-formsallow-scriptsallow-popupsallow-downloadsallow-modalsallow-popups-to-escape-sandboxallow-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.
Attribut für das Linkziel festlegen
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.