Um Nutzer vor schädlichem HTML- oder JavaScript zu schützen, werden in Apps Script iframes verwendet, um HTML-Dienst-Webanwendungen oder benutzerdefinierte Benutzeroberflächen für Google Docs, Google Tabellen und Google Formulare in einer Sandbox zu platzieren. In anderen Situationen, z. B. beim Generieren des E-Mail-Texts, wird vom HTML-Dienst keine Sandbox verwendet. Die Sandbox schränkt den clientseitigen Code ein.
Sandbox-Modus
Alle Sandbox-Modi werden eingestellt, mit Ausnahme von IFRAME
. Bei Apps, die ältere Sandbox-Modi verwenden, wird jetzt automatisch der neuere IFRAME
-Modus verwendet. Wenn Sie Scripts haben, die mit den älteren Modi (NATIVE
und EMULATED
) entwickelt wurden, sollten Sie der Anleitung zur Migration folgen, damit sie im Modus IFRAME
ordnungsgemäß funktionieren.
Die Methode setSandboxMode
hat beim Aufrufen jetzt keine Auswirkungen mehr.
Einschränkungen im IFRAME-Modus
Der IFRAME
-Sandbox-Modus basiert auf der iFrame-Sandboxing-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 Scriptprojekte 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 Script umleiten möchten, fügen Sie stattdessen einen Link oder eine Schaltfläche hinzu, über die Nutzer eine Aktion ausführen können.
Attribut „Linkziel“ festlegen
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-Abschnitt 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.