Usługa HTML: ograniczenia

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.

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.