urlfetchapp script loop guide google getcontenttext for example code array apps app google-apps-script google-spreadsheet

google-apps-script - script - response getcontenttext()



"Método UrlFetchApp.fetch invocado en el alcance global" de Google Apps Script Ediotor Execution Hints (0)

Estoy desarrollando un complemento de hoja de cálculo de Google en el editor de scripts de Google Apps.

Como dijo https://developers.google.com/apps-script/add-ons/lifecycle , a veces el script se ejecuta con el modo autorizado de límite, por lo que no escribiremos ningún código que requiera grandes privilegios (como UrlFetch) en el ámbito global.

Advertencia: cuando se ejecuta su función onOpen (e), se carga todo el script y se ejecuta cualquier instrucción global. Estas declaraciones se ejecutan bajo el mismo modo de autorización que en Open (e) y fallarán si el modo las prohíbe. Esto evita que onOpen (e) se ejecute. Si su complemento publicado no puede agregar sus elementos de menú, busque en la consola de JavaScript del navegador para ver si se produjo un error, luego examine su script para ver si la función onOpen (e) o las variables globales llaman a servicios que no están permitidos. en AuthMode.NONE.

Pero encontré un comportamiento muy extraño de "invocado en el ámbito global". Puse todo mi código dentro del cierre y los llamé, pero aún recibí una advertencia que decía que ejecutaba UrlFetchApp en el ámbito global.

finalmente, descubrí la diferencia entre "ejecutar en alcance global" vs "no global", es porque la primera es var g = function () { /* UrlFetchApp here */ } , y la segunda es function ng() { /* UrlFetchApp here */ ] .

El siguiente código se puede ejecutar dentro de Google Script Editor. Si ejecuta testGlobalScope () con Tg (), recibirá la advertencia. Sin embargo, cuando se ejecuta T.ng () solamente, está bien.

var T = (function() { var g = function () { // Method UrlFetchApp.fetch invoked in the global scope. try { UrlFetchApp.fetch(''http://google.com'') } catch (e) {} } function ng() { try { UrlFetchApp.fetch(''http://google.com'') } catch (e) {} } return { g: g , ng: ng } }()) function testGlobalScope() { T.g() // T.g() will cause Script Editor show "Execution Hints" with red light: Method UrlFetchApp.fetch invoked in the global scope. // T.ng() // This will not show any warning. }

Mi pregunta es:

  1. ¿Por qué tienen este tipo de diferencia?
  2. si todavía quiero usar un patrón de módulo como var T = (function () {} ()), ¿cómo podría deshacerme del problema de "ejecutar en alcance global"?