Como cerrar la app web

1,717 views
Skip to first unread message
Assigned to ahcast...@gmail.com by me

William Rojas

unread,
Feb 6, 2015, 4:17:04 PM2/6/15
to apps-script...@googlegroups.com
Comunidad:
He creado una app que trae y lleva información a varias hojas de calculo en google drive(app script).
La he convertido (Implementado) como aplicación web, el problema es que no funciona el botón CERRAR google.script.host.close();
El cual cierra la app, windows.close tampoco me a funcionado.
este es el código:

Código.gs
function doGet(){
  var html = HtmlService.createTemplateFromFile('Index').evaluate().setTitle('FACTURA');
  return html;
   function include(filename) {
     return HtmlService.createHtmlOutputFromFile(filename)
      .setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .getContent();
   }
Index.html
 <?!= include('JavaScript'); ?>
  <form id="datosFACTURAS" name="datosFACTURAS">
     Vendedor:<input type='text' id='vendedor' name='vendedor' />
      <button class="action" id="guardar">ENVIAR</button>
      <button class="share" id="cancelar">CANCELAR</button>
  </form>
JavaScript.html
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script>

  function cerrarVentanaModal(){
      google.script.host.close(); 
  }
  function doGet(){
    google.script.run.withSuccessHandler(cerrarVentanaModal).procesaFormDatosFACTURAS(document.forms[0]);
  }  
  $( function() {
      $("#cancelar").click(cerrarVentanaModal);
      $("#guardar").click(function(){
                              
                              var vendedor = $("#vendedor").val();                                  
                                if(vendedor == ""){
                                            alert("Ingrese el 'Código del vendedor'.");
                                            return false;
                                }else{
                                  doGet();}
                                   });            
      }
    );
</script> 
Nota: lo que necesito es cerrar la app web cuando haga click en cerrar. ya que esta: HTML Service: Create and Serve HTML - Google Apps Script — Google Developers no  me funciona o no he sabido implementarla...

William Rojas

unread,
Feb 6, 2015, 4:32:14 PM2/6/15
to apps-script...@googlegroups.com
//Esta es la funcion que cierra la app

 function cerrarVentanaModal(){
      google.script.host.close(); 

Omar Raygoza

unread,
Feb 7, 2015, 12:32:13 AM2/7/15
to apps-script...@googlegroups.com
Hola William.

Por lo que veo, en tu aplicación, la corres como una WebApp publicada, supongo que creaste una versión y la publicación, por lo cual, se generó una liga la cual es la que hace referencia a la aplicación y ahí te aparece el formulario HTML que creaste.

Siendo así, te comento los siguiente, el SANDBOX, es conocido también como caja de arena, es un ambiente en el cual corren las aplicaciones creadas en GAS (Google Apps Script) y son, por decirlo de una manera, precompiladas por Google para que no puedan realizar acciones que afecten al nevegador y nada que pueda afectar al usuario.
Por ejemplo, no pueden acceder al navegador con el objeto DOM y mucho menos a eventos del mouse.
La liga con la información más completa esta en https://developers.google.com/apps-script/reference/html/sandbox-mode

Por lo antes mencionado, no podemos cerrar la aplicación pues es una WebApp Html, si fuese una app que corre en Sheets o Docs, se podría usar close();

¿Cual sería una solución?
Que en vez de llamar a una función google.script.host.close(); llames a una función google.scrtip.host.cerrar();

Y crees una función en GAS que cargue un archivo HTML con una página en blanco o un mensaje de que debes cerrar la pestaña.

Espero que la información te sirva y puedas retroalimentarnos al respecto de cómo te fue.

Saludos

William Rojas

unread,
Feb 10, 2015, 10:46:44 AM2/10/15
to apps-script...@googlegroups.com
Hola Omar: Que pena no haber podido contestar antes, vi su respuesta y realmente me dio la orientación que necesitaba para resolver el inconveniente que tenia con mi App Web... 
Código.gs
-------------
function getScriptUrl() {
 var url = ScriptApp.getService().getUrl();
 return url;
}
function doGet(e) {
  Logger.log(Utilities.jsonStringify(e));
  if (!e.parameter.page) {
    return HtmlService.createTemplateFromFile('index').evaluate().setTitle("DatePicker").setSandboxMode(HtmlService.SandboxMode.NATIVE);
  }
    return HtmlService.createTemplateFromFile(e.parameter['page']).evaluate().setSandboxMode(HtmlService.SandboxMode.NATIVE);
}
//PEDIDO
function procesaFormDatosFACTURAS(e){
    var hojaSALIDAS = hojaCalculo.getSheetByName('DB');
    var ultimaFila = hojaSALIDAS.getLastRow();
    
    var sNombre = e.nombre;
    
    hojaSALIDAS.getRange(ultimaFila+1, 1).setValue(sNombre);
  }  
function include(filename) {
  return HtmlService.createHtmlOutputFromFile(filename)
  .setSandboxMode(HtmlService.SandboxMode.IFRAME)
  .getContent();
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
index.html
--------
<html>
 <style type="text/css"> 
   .demo { margin: 30px ; color : #AAA ; font-family : arial sans-serif ;font-size : 10pt } 
   p { color : red ; font-size : 14pt } 
 </style>
 <body>
<div class="demo" >

<h1>Bienvenido a alguna página aleatoria</h1>

<p>Por favor, seleccione una fecha:</p>

Fecha : <input type="text" name="date" id="datepicker" />
<input type="text" id="alternate" size="30">
<script>
$( "#datepicker" ).datepicker({
altField: "#alternate",
altFormat: "DD, d MM, yy",
showWeek: true,
firstDay: 1,
});
</script>

 
    <h1>Página Index</h1>
    <?!= include('JavaScript'); ?>
    <br>
    <br>
    <form id="datosFACTURAS" name="datosFACTURAS">
       Nombre:<input type='text' id='nombre' name='nombre' />
       <br>
    </form>
    <br>
    <?var url = getScriptUrl();?><a href='<?=url?>?page=respuesta'><input type='button' id="guardar" value='ENVIAR'></a>
    </div>
  </body>
</html>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
respuesta.html
---------------------
<html>
  <body>
    <h1>Página Respuesta</h1>
    Pedido enviado! Cierre la pestaña...
    <?var url = getScriptUrl();?><a href='<?=url?>?page=index'><button name='button'>NUEVO PEDIDO</button></a>
  </body>
</html>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
JavaScript.html
-----------------------
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script> 
  function doGet(){
    google.script.run.withSuccessHandler().procesaFormDatosFACTURAS(document.forms[0]);
  }  
  $( function() {
   
      $("#guardar").click(function(){
                              
                              var nombre = $("#nombre").val();                                  
                                if(nombre == ""){
                                            alert("Ingrese el nombre.");
                                            return false;
                                }else{
                                        doGet();
                                     }
                                   });            
      }
    );
</script>




Nota: el datePicker es otro ejercicio que anidé aquí, aprovechando que tenia un proyecto para hacer ejercicios de prueba...

Gracias !
Reply all
Reply to author
Forward
0 new messages