Aby chronić użytkowników przed złośliwym kodem HTML lub JavaScript, Apps Script używa elementów iframe do tworzenia piaskownicy dla aplikacji internetowych usługi HTML lub niestandardowych interfejsów użytkownika w Dokumentach, Arkuszach i Formularzach 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 zostały wycofane z wyjątkiem IFRAME
. Aplikacje korzystające ze starszych trybów piaskownicy będą teraz automatycznie używać nowszego 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 teraz żadnego efektu po wywołaniu.
Ograniczenia w trybie IFRAME
Tryb IFRAME
piaskownicy opiera się na funkcji piaskownicy iframe w HTML5, która korzysta z 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 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 musisz przekierować skrypt, dodaj link lub przycisk, aby użytkownik mógł wykonać działanie.
Ustawianie atrybutu elementu docelowego linku
W trybie IFRAME
musisz ustawić atrybut link docelowy 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 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>
Aktywne treści wymagają protokołu HTTPS
Aktywne treści, takie jak skrypty, zewnętrzne arkusze stylów i żądania XmlHttpRequest, muszą być wczytywane przez HTTPS, a nie HTTP.