Para proteger a los usuarios y evitar que se muestren HTML o JavaScript maliciosos, Apps Script usa iframes para hacer una zona de pruebas de aplicaciones web de servicios HTML o interfaces de usuario personalizadas para Documentos, Hojas de cálculo y Formularios de Google. (El servicio HTML no usa la zona de pruebas en otras situaciones, como cuando se genera el cuerpo de un correo electrónico). La zona de pruebas impone limitaciones en el código del cliente.
Modo de zona de pruebas
Todos los modos de la zona de pruebas dejarán de estar disponibles, excepto IFRAME
. Las apps que usan modos de zona de pruebas más antiguos ahora usan automáticamente el modo IFRAME
más reciente. Si tienes secuencias de comandos que se desarrollaron con los modos más antiguos (NATIVE
y EMULATED
), debes seguir las instrucciones de migración para asegurarte de que funcionen de forma correcta en el modo IFRAME
.
Ahora, el método setSandboxMode
no tiene efecto cuando se lo llama.
Restricciones en el modo IFRAME
El modo de zona de pruebas IFRAME
se basa en la función de zona de pruebas de iframe en HTML5 con las siguientes palabras clave:
allow-same-origin
allow-forms
allow-scripts
allow-popups
allow-downloads
allow-modals
allow-popups-to-escape-sandbox
allow-top-navigation-by-user-activation
: Este atributo solo se configura para proyectos de secuencia de comandos independientes.
La palabra clave allow-top-navigation
, que permite que el contenido navegue por su contexto de navegación de nivel superior, está restringida y no se establece como un atributo en la zona de pruebas. Si necesitas redireccionar la secuencia de comandos, agrega un vínculo o un botón para que el usuario realice acciones.
Cómo configurar el atributo de destino del vínculo
En el modo IFRAME
, debes establecer el atributo de destino del vínculo en _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>
También puedes anular este atributo con la etiqueta <base>
en la sección del encabezado de la página web adjunta:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
Se requiere HTTPS para el contenido activo
El contenido"Activo", como las secuencias de comandos, las hojas de estilo externas y XmlHttpRequests, se debe cargar a través de HTTPS, no de HTTP.