小编Hua*_*uan的帖子

"在全局范围内调用方法UrlFetchApp.fetch." Google Apps脚本Ediotor执行提示

我正在谷歌应用脚​​本编辑器中开发一个谷歌电子表格插件.

正如https://developers.google.com/apps-script/add-ons/lifecycle所说,有时脚本以限制授权模式运行,因此我们不会在全局范围内编写任何需要高权限的代码(如UrlFetch).

警告:运行onOpen(e)函数时,将加载整个脚本并执行任何全局语句.这些语句在与onOpen(e)相同的授权模式下执行,如果模式禁止它们将失败.这可以防止onOpen(e)运行.如果您发布的加载项无法添加其菜单项,请在浏览器的JavaScript控制台中查看是否抛出错误,然后检查脚本以查看onOpen(e)函数或全局变量是否调用不允许的服务在AuthMode.NONE中.

但我发现了一个"在全球范围内调用"的非常奇怪的行为.我将所有代码放在闭包中,并调用它们,但仍然警告说我在全局范围内运行UrlFetchApp.

最后,我发现"在全球范围内运行"与"非全局"之间的区别,是因为第一个是var g = function () { /* UrlFetchApp here */ },第二个是function ng() { /* UrlFetchApp here */ ].

以下代码可以在Google Script Editor中运行.如果使用Tg()运行testGlobalScope(),将收到警告.不管怎样,只运行T.ng(),没关系.

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() …
Run Code Online (Sandbox Code Playgroud)

google-sheets google-apps-script

9
推荐指数
1
解决办法
463
查看次数

标签 统计

google-apps-script ×1

google-sheets ×1