Aby chronić użytkowników przed wyświetlaniem szkodliwego kodu HTML lub JavaScriptu, skrypt Apps Script używa ramek iframe do tworzenia piaskownicy 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 wycofywane, 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 ma już żadnego wpływu na wywołanie.
Ograniczenia w trybie IFRAME
Tryb piaskownicy IFRAME
opiera się na funkcji iframe sandboxing w HTML5, która 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 samodzielnych projektach skryptów.
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>
HTTPS wymagany w przypadku treści aktywnych
„Aktywne” treści, takie jak skrypty, zewnętrzne arkusze stylów i żądania XmlHttpRequest, muszą być wczytywane przez HTTPS, a nie HTTP.