【问题标题】:Pass an object as a global variable in js from gs从 gs 传递一个对象作为 js 中的全局变量
【发布时间】:2020-05-29 09:51:42
【问题描述】:

我正在使用 Google Apps 脚本构建网络应用程序。 我在谷歌应用脚​​本中有一个函数:

function getPalette(){
  var ss = SpreadsheetApp.openByUrl(url);
  var ws_palette = ss.getSheetByName("palette");
  var palette_data = ws_palette.getRange(2,1,1,1).getValue();
  var palette = JSON.parse(palette_data.replace(/'/g, '"'));
  return palette;
}

我想将此 palette 对象作为全局变量传递给 javascript.html。

我该怎么做?非常感谢!

【问题讨论】:

  • 请补充更多细节,gs是什么?
  • “通用”变量是什么意思?
  • @TheMaster 意味着我可以在 javascript 文件中的每个函数中使用它
  • @GwenYang 仍然不清楚。 Js文件或gs文件中的任何地方?到处都是什么意思?您是否尝试过模板和 google.script.run?那些不满意吗?如果是,为什么?
  • 您是在谈论与code.gs 文件一样位于同一项目中的html 文件吗?

标签: javascript google-apps-script web-applications global-variables


【解决方案1】:

scriptlets 可以从 html/javascript 端访问应用程序脚本端变量

Scriptlet 允许您使用 <? ... ?> 运行任何应用程序脚本代码,或使用 <?= ... ?>htmljavascript 部分或您的 Web 应用程序中访问来自 code.gs 的任何变量。

访问全局变量的示例:

代码.gs

const globalVar = "I am global";

function doGet() {
  return HtmlService.createTemplateFromFile("javascript").evaluate();
}

javascript.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <script>
    console.log(<?= globalVar ?>);
    </script>
  </body>
</html>

重要:

只有当您通过创建和评估模板而不是直接创建输出来返回您的 html 内容时,Apps Script 脚本才会起作用。

【讨论】:

  • 谢谢!我认为这非常接近。我使用了function include_JS() { return HtmlService.createHtmlOutputFromFile("Javascript").getContent(); } 并在 .gs 文件中具有问题中的功能。然后const palette = getPalette();。然后在 Javascript.html 中我使用了let palette = &lt;? palette ?&gt; 它没有用。
  • 请阅读我回答中的最后一句话:创建和评估模板而不是直接创建输出,所以:createTemplateFromFile("javascript").evaluate(); 而不是createHtmlOutputFromFile("Javascript")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 2013-08-31
相关资源
最近更新 更多