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 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 (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 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.

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.