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 dla 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 wyłączone 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 działa teraz po wywołaniu.

Ograniczenia w trybie IFRAME

Tryb piaskownicy IFRAME opiera się na funkcji piaskownicy iframe w HTML5 i 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 przypadku samodzielnych projektów skryptu.

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>

Protokół HTTPS jest wymagany w przypadku treści aktywnych

„Aktywne” treści, takie jak skrypty, zewnętrzne arkusze stylów i żądania XmlHttpRequest, muszą być ładowane przez HTTPS, a nie HTTP.