Aby chronić użytkowników przed wyświetlaniem szkodliwego kodu HTML lub JavaScriptu, skrypt Apps Script używa ramek iframe do tworzenia piaskownicy dla aplikacji internetowych usług HTML lub niestandardowych interfejsów użytkownika dla Dokumentów, Arkuszy i Formularzy Google. (usługa HTML nie używa piaskownicy w innych sytuacjach, np. podczas generowania 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 automatycznie korzystają teraz z nowego trybu IFRAME
. Jeśli masz skrypty opracowane w starszych trybach (NATIVE
i EMULATED
), postępuj zgodnie z instrukcjami migracji, aby mieć pewność, że będą one prawidłowo działać w trybie IFRAME
.
Metoda setSandboxMode
nie działa teraz po wywołaniu.
Ograniczenia w trybie IFRAME
Tryb piaskownicy IFRAME
opiera się na funkcji piaskownicy iframe w HTML5 i wykorzystuje te 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 nawigację po kontekście przeglądania na najwyższym poziomie, jest ograniczone i nie jest ustawiane jako atrybut w sandboxie. Jeśli chcesz przekierować skrypt, dodaj link lub przycisk, który użytkownik może kliknąć, aby wykonać odpowiednie działanie.
Ustawianie atrybutu elementu docelowego linku
W trybie IFRAME
musisz ustawić atrybut link target na _top
lub _blank
:
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>
Możesz też zastąpić ten atrybut za pomocą tagu <base>
w sekcji head strony internetowej:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
Protokół HTTPS jest wymagany w przypadku treści aktywnych
„Aktywne” treści, takie jak skrypty, zewnętrzne arkusze stylów i żądania XmlHttpRequest, muszą być ładowane przez HTTPS, a nie HTTP.