Aby chronić użytkowników przed złośliwym kodem HTML lub JavaScript, Apps Script używa elementów iframe do podziału aplikacji internetowych lub niestandardowych użytkowników w usłudze HTML w trybie piaskownicy interfejsy Dokumentów, Arkuszy i Formularzy Google. (Usługa HTML nie korzysta z prefiksu 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 starszej piaskownicy
nowe tryby IFRAME
są teraz używane automatycznie. Jeśli masz skrypty, które
zostały opracowane przy użyciu starszych trybów (NATIVE
i EMULATED
),
wykonaj instrukcje migracji, aby mieć pewność,
działają poprawnie w trybie IFRAME
.
setSandboxMode
nie ma żadnego efektu po wywołaniu.
Ograniczenia w trybie IFRAME
Tryb piaskownicy IFRAME
opiera się na
Funkcja piaskownica iframe
w HTML5 przy użyciu tych słów kluczowych:
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 ustawiony tylko dla: samodzielnych projektów skryptów.
Słowo kluczowe allow-top-navigation
, które umożliwia poruszanie się po witrynie
kontekst przeglądania na najwyższym poziomie, jest ograniczony i nie jest ustawiony jako atrybut
w środowisku piaskownicy. Jeśli chcesz przekierować skrypt, dodaj link lub przycisk dla parametru
do użytkownika.
Ustawianie atrybutu elementu docelowego linku
W trybie IFRAME
ustaw atrybut docelowy linku na albo
_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, używając tagu <base>
w nagłówku.
otaczającej 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
„Aktywny” treści np. skrypty, zewnętrzne arkusze stylów i żądania XmlHttpRequest, muszą być ładowane przez HTTPS, a nie HTTP.