Usługa HTML: ograniczenia

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 (NATIVEEMULATED), 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.

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.