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.
Attribut für Link-Ziel 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-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.