Apps Script verwendet eine Sicherheits-Sandbox
um diese Daten zu schützen, Google Workspace
in bestimmten Situationen anwenden können. Alle
Sandbox-Modi laufen jetzt ab, mit Ausnahme von IFRAME
. Apps, die eine ältere Sandbox verwenden
verwenden jetzt automatisch den neueren Modus IFRAME
.
Apps, in denen diese älteren Modi bisher mit dem HTML-Dienst verwendet wurden, müssen möglicherweise
Nehmen Sie Änderungen für den IFRAME
-Modus vor, um die folgenden Unterschiede zu beheben:
- Sie müssen jetzt das Attribut
target
des Links mittarget="_top"
überschreiben odertarget="_blank"
- HTML-Dateien, die vom HTML-Dienst bereitgestellt werden, müssen Folgendes enthalten: <!DOCTYPE html>, <html> und <body> Tags
- Die native Google-Ladebibliothek
api.js
wird inIFRAME
-Modus - Picker-Nutzer, die anrufen müssen
setOrigin()
, weil Inhalte von einer neuen Domain bereitgestellt werden - Einige ältere Browser, einschließlich IE9, werden nicht unterstützt.
- Importierte Ressourcen müssen jetzt HTTPS verwenden
- Das Senden von Formularen wird nicht mehr standardmäßig verhindert
Diese Unterschiede werden in den folgenden Abschnitten näher erläutert.
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();
}
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 der Methode <base> -Tag im head-Element der zugehörigen Webseite:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
HTML-Tags der obersten Ebene
Im Sandbox-Modus NATIVE
(und EMULATED
) würden bestimmte HTML-Tags
automatisch zu einer Apps Script-HTML-Datei hinzugefügt .Dies geschieht jedoch nicht,
im IFRAME
-Modus.
Damit Ihre Projektseiten mit IFRAME
richtig ausgeliefert werden, sollten Sie
in den folgenden Top-Level-Tags:
<!DOCTYPE html>
<html>
<body>
<!-- Add your HTML content here -->
</body>
</html>
Native JavaScript-Ladebibliothek muss explizit geladen werden
Skripts, für die die native Ladebibliothek api.js
automatisch geladen wurde
muss geändert werden, damit diese Bibliothek wie im folgenden Beispiel explizit geladen wird:
<script src="https://apis.google.com/js/api.js?onload=onApiLoad">
</script>
Änderung an der Google Picker API
Wenn Sie die Google Picker API verwenden, müssen Sie beim Erstellen jetzt setOrigin()
aufrufen.
den PickerBuilder und übergeben den Ursprung google.script.host.origin
, wie hier gezeigt
im folgenden Beispiel:
function createPicker(oauthToken) {
var picker = new google.picker.PickerBuilder()
.addView(google.picker.ViewId.SPREADSHEETS) // Or a different ViewId
.setOAuthToken(oauthToken)
.setDeveloperKey(developerKey)
.setCallback(pickerCallback)
.setOrigin(google.script.host.origin) // Note the setOrigin
.build();
picker.setVisible(true);
}
Ein vollständiges Beispiel finden Sie unter Dialogfelder zum Öffnen von Dateien:
Unterstützte Browser
Der IFRAME
-Sandbox-Modus basiert auf der iFrame-Sandbox-Funktion in HTML5.
Diese Funktion wird von einigen älteren Browsern nicht unterstützt, z. B. Internet Explorer 9. Dieses
kann zu Problemen führen, wenn Ihr Apps Script-Projekt
- verwendet
HtmlService
und - zuvor verwendetes Sandboxing von
EMULATED
oderNATIVE
Wenn du diese Apps in den Sandbox-Modus „IFRAME
“ migrierst, funktionieren sie unter Umständen nicht mehr
einige ältere Browser (insbesondere IE9 und älter), die den iFrame von HTML5 nicht unterstützen
Sandbox-Funktion.
Apps, die bereits den IFRAME
-Modus anfordern oder HtmlService
überhaupt nicht verwenden,
die von diesem Problem nicht betroffen sind.
HTTPS ist jetzt für importierte Ressourcen erforderlich
Frühere Anwendungen, die Ressourcen über HTTP importiert haben, müssen geändert werden in verwenden Sie stattdessen HTTPS.
Das Senden von Formularen wird nicht mehr standardmäßig verhindert
Bei NATIVE
Sandboxes wurde das Senden von HTML-Formularen verhindert
und beim Navigieren auf der Seite. Daher könnte ein Entwickler einfach ein onclick
-Element hinzufügen,
-Handler hinzu. Sie müssen sich keine Gedanken darüber machen, was später passiert.
Im IFRAME
-Modus können jedoch HTML-Formulare gesendet werden. Wenn ein Formular
für das Element kein action
-Attribut angegeben ist, wird es an eine leere Seite gesendet.
Schlimmer noch: Der innere iFrame leitet den Nutzer vor dem onclick
zur leeren Seite weiter.
Handler abgeschlossen werden kann.
Die Lösung besteht darin, Ihrer Seite JavaScript-Code hinzuzufügen, mit dem verhindert wird, dass das Formular Elemente ab, sodass die Klick-Handler Zeit haben, :
<script>
// Prevent forms from submitting.
function preventFormSubmit() {
var forms = document.querySelectorAll('form');
for (var i = 0; i < forms.length; i++) {
forms[i].addEventListener('submit', function(event) {
event.preventDefault();
});
}
}
window.addEventListener('load', preventFormSubmit);
</script>
Ein vollständiges Beispiel finden Sie im HTMLService-Leitfaden. Client-zu-Server-Kommunikation.