Aby chronić użytkowników przed złośliwym kodem HTML lub JavaScript, Apps Script używa elementów iframe do aplikacji internetowych usług HTML w trybie piaskownicy lub niestandardowych interfejsów użytkownika w Dokumentach, Arkuszach i Formularzach Google. (usługa HTML nie używa piaskownicy w innych sytuacjach, takich jak generowanie treści e-maila). Piaskownica nakłada ograniczenia na kod po stronie klienta.
Tryb piaskownicy
Wszystkie tryby piaskownicy są teraz wyłączone z wyjątkiem IFRAME
. Aplikacje korzystające ze starszych trybów piaskownicy są teraz automatycznie używane w nowszym trybie IFRAME
. Jeśli masz skrypty, które zostały utworzone w starszych trybach (NATIVE
i EMULATED
), postępuj zgodnie z instrukcjami dotyczącymi migracji, aby zapewnić ich prawidłowe działanie w trybie IFRAME
.
Metoda setSandboxMode
nie ma już skutku po wywołaniu.
Ograniczenia w trybie IFRAME
Tryb piaskownicy IFRAME
działa w oparciu o funkcję piaskownicy iframe w HTML5 i wykorzystuje następujące słowa kluczowe:
allow-same-origin
allow-forms
allow-scripts
allow-popups
allow-downloads
allow-modals
allow-popups-to-escape-sandbox
allow-top-navigation-by-user-activation
– ten atrybut jest ustawiany tylko w przypadku samodzielnych projektów skryptu.
Słowo kluczowe allow-top-navigation
, które umożliwia treściom poruszanie się po kontekście przeglądania najwyższego poziomu, jest ograniczone i nie jest ustawione jako atrybut w piaskownicy. Jeśli konieczne jest przekierowanie skryptu, zamiast tego dodaj link lub przycisk, który pozwala użytkownikowi wykonać daną czynność.
Ustawianie atrybutu linku docelowego
W trybie IFRAME
musisz ustawić atrybut docelowy link na _top
lub _blank
:
Kod.js
function doGet() {
var template = HtmlService.createTemplateFromFile('top');
return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
góra.html
<!DOCTYPE html>
<html>
<body>
<div>
<a href="http://google.com" target="_top">Click Me!</a>
</div>
</body>
</html>
Możesz też zastąpić ten atrybut tagiem <base>
w sekcji nagłówka zamykającej strony:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
W przypadku aktywnych treści wymagany jest protokół HTTPS
Treści „aktywne”, takie jak skrypty, zewnętrzne arkusze stylów i żądania XmlHttpRequest, muszą być ładowane przez HTTPS, a nie HTTP.