setsandboxmode - Vinculación a otra página HTML en Google Apps Script
google apps script tutorial (1)
Si bien el HtmlService le permite servir HTML, no está "alojando" páginas, y no puede acceder directamente a los diversos archivos html en su proyecto Apps Script por URL. En cambio, su aplicación web tendrá una URL cuando se publique, y esa es la única URL que tiene.
Esta es una forma en que puede publicar páginas separadas de su secuencia de comandos y hacer que se comporten de manera similar a los enlaces de archivos html.
La función doGet()
se pasa un evento cuando se llama, y podemos aprovechar eso para indicar qué página queremos que se sirva. Si nuestro ID de aplicación web es <SCRIPTURL>
, aquí se verá una URL más una cadena de consulta que solicita una página específica:
https://script.google.com/macros/s/<SCRIPTURL>/dev?page=my1
Usando HTML con plantillas, podemos generar el URL + querystring necesario sobre la marcha. En nuestro doGet()
, solo tenemos que analizar la cadena de consulta para determinar qué página servir.
Aquí está el guión, con dos páginas de muestra que contienen botones para alternar entre ellos.
Code.gs
/**
* Get the URL for the Google Apps Script running as a WebApp.
*/
function getScriptUrl() {
var url = ScriptApp.getService().getUrl();
return url;
}
/**
* Get "home page", or a requested page.
* Expects a ''page'' parameter in querystring.
*
* @param {event} e Event passed to doGet, with querystring
* @returns {String/html} Html to be served
*/
function doGet(e) {
Logger.log( Utilities.jsonStringify(e) );
if (!e.parameter.page) {
// When no specific page requested, return "home page"
return HtmlService.createTemplateFromFile(''my1'').evaluate();
}
// else, use page parameter to pick an html file from the script
return HtmlService.createTemplateFromFile(e.parameter[''page'']).evaluate();
}
my1.html
<html>
<body>
<h1>Source = my1.html</h1>
<?var url = getScriptUrl();?><a href=''<?=url?>?page=my2''> <input type=''button'' name=''button'' value=''my2.html''></a>
</body>
</html>
my2.html
<html>
<body>
<h1>Source = my2.html</h1>
<?var url = getScriptUrl();?><a href=''<?=url?>?page=my1''> <input type=''button'' name=''button'' value=''my1.html''></a>
</body>
</html>
Al vincular desde ScriptDbConsole.html a legend.html aparece el siguiente mensaje de error:
Lo sentimos, el archivo que ha solicitado no existe. Compruebe la dirección e inténtelo de nuevo.
Esto normalmente funcionaría en un entorno normal, pero no aquí, supongo. Está en script.google.com.
Al crear un nuevo archivo .html en el proyecto script.google.com, lo crea en la misma ubicación que lo hizo para los demás, por lo que este código debería funcionar correctamente. ¿Cómo puedo abrir legend.html desde ScriptDbConsole.html?
<a href=''legend.html'' target=''_blank''>Open in new window</a>