Servizio HTML: limitazioni

Per proteggere gli utenti da HTML o JavaScript dannosi, il servizio HTML utilizza iframe per il sandbox di app web o interfacce utente personalizzate per Documenti Google, Fogli Google e Moduli. Il servizio HTML non utilizza una sandbox in altre situazioni, ad esempio per generare il corpo di un'email. La sandbox impone limitazioni al codice lato client.

Modalità sandbox

Ad eccezione di IFRAME, tutte le modalità sandbox sono state ritirate. Le app che in precedenza utilizzavano le modalità NATIVE o EMULATED ora utilizzano automaticamente la modalità IFRAME. Se lo script è stato sviluppato con una modalità precedente, segui le istruzioni per la migrazione per assicurarti che funzioni correttamente.

Il metodo setSandboxMode ora non ha effetto quando viene chiamato.

Limitazioni in modalità IFRAME

La modalità sandbox IFRAME si basa sulla funzionalità iframe sandboxing in HTML5, utilizzando le seguenti parole chiave:

  • allow-same-origin
  • allow-forms
  • allow-scripts
  • allow-popups
  • allow-downloads
  • allow-modals
  • allow-popups-to-escape-sandbox
  • allow-top-navigation-by-user-activation: questo attributo è impostato solo per i progetti di script autonomi.

La parola chiave allow-top-navigation, che consente ai contenuti di navigare nel contesto di navigazione di primo livello, è limitata e non impostata come attributo nella sandbox. Se devi reindirizzare lo script, aggiungi un link o un pulsante su cui l'utente può intervenire.

Nella modalità IFRAME devi impostare l'attributo destinazione link su _top o _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>

Puoi anche sostituire questo attributo utilizzando il tag <base> nella sezione head della pagina web contenitore:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
   <div>
     <a href="http://google.com">Click Me!</a>
   </div>
 </body>
</html>

HTTPS richiesto per i contenuti attivi

I contenuti"attivi", come script, fogli di stile esterni e XmlHttpRequest, devono essere caricati tramite HTTPS, non HTTP.