Javascript 如何将doGet(e)参数传递给另一个函数?

Javascript 如何将doGet(e)参数传递给另一个函数?,javascript,google-apps-script,Javascript,Google Apps Script,我能够从发布的应用程序脚本的url中捕获变量,但我不确定如何将该变量传递给另一个函数。如果包含变量,下面的脚本将不会运行onRun函数。我的目标是传递2个变量,但每次只传递一个问题 function doGet(e) { var id = e.parameter.id; var minutes = e.parameter.min; var html = '<p>' +'<button onClick=google.script.run.onRun(

我能够从发布的应用程序脚本的url中捕获变量,但我不确定如何将该变量传递给另一个函数。如果包含变量,下面的脚本将不会运行onRun函数。我的目标是传递2个变量,但每次只传递一个问题

function doGet(e) {

    var id = e.parameter.id;
    var minutes = e.parameter.min;


  var html = '<p>'
  +'<button onClick=google.script.run.onRun('+id+')>Run</button>' // Does not work when clicked
    +'<button onClick=google.script.run.onRun()>Run without parameter</button>'
  +'<button onClick=google.script.run.turnOn()>On</button>'
  +'<button onClick=google.script.run.turnOff()>Off</button>'
  +'</p>';

  return HtmlService.createHtmlOutput(html).setSandboxMode(HtmlService.SandboxMode.IFRAME);

}

function onRun(id){
  Logger.log("id: "+id); 
}
函数doGet(e){
var id=e.parameter.id;
var分钟=e.parameter.min;
var html=''
+“运行”//单击时不工作
+“无参数运行”
+“开”
+“关”
+“

”; 返回HtmlService.createHtmlOutput(html).setSandboxMode(HtmlService.SandboxMode.IFRAME); } 函数onRun(id){ Logger.log(“id:+id”); }
使用全局变量,或将值放入缓存

要声明全局变量,请在函数外部声明变量:

var id = "";
var minutes = "";

function doGet(e) {

  id = e.parameter.id;
  minutes = e.parameter.min;

  var html = . . . . . HTML HERE;

  onRun(id, minutes);
  return HtmlService.createHtmlOutput(html).setSandboxMode(HtmlService.SandboxMode.IFRAME);

}
或将值放入缓存:

function doGet(e) {

  var id = e.parameter.id;
  var minutes = e.parameter.min;

  if (!!id) {cache.put('theid', id, 4000);};
  if (!!minutes) {cache.put('min', minutes, 4000);};

  var html = . . . . . HTML HERE;

  onRun(id, minutes);
  return HtmlService.createHtmlOutput(html).setSandboxMode(HtmlService.SandboxMode.IFRAME);

}
然后可以从缓存中检索值,或者在代码中的任何位置使用全局变量

因此,您不需要将任何内容从HTML传递到
.gs
代码

我没有看到在
doGet()
函数中调用
onRun()
函数的任何内容

您可以从
doGet()
函数调用另一个函数,只要它在
返回之前<代码>返回
在该点停止功能

function doGet(e) {

  var id = e.parameter.id;
  var minutes = e.parameter.min;

  var html = . . . . . HTML HERE;

  onRun(id, minutes);
  return HtmlService.createHtmlOutput(html).setSandboxMode(HtmlService.SandboxMode.IFRAME);

}
你不能有:

  return HtmlService.createHtmlOutput(html).setSandboxMode(HtmlService.SandboxMode.IFRAME);
  onRun(id, minutes);
您还可以使用
window.onload=function(){code}从HTML脚本标记触发脚本运行

<script>
  window.onload = function() {
    console.log("This onload did run");
    code here;
  };
</script>

诀窍是使用公共缓存(谢谢Sandy Good)

函数doGet(e){
var id=e.parameter.id;
var分钟=e.parameter.min;
var cache=CacheService.getPublicCache();
cache.put(“id”,id,30);
缓存。放置(“分钟”,分钟,30);
var html=''
+“无参数运行”
+“开”
+“关”
+“

”; 返回HtmlService.createHtmlOutput(html).setSandboxMode(HtmlService.SandboxMode.IFRAME); } 函数onRun(id){ var cache=CacheService.getPublicCache(); var id=cache.get('id'); var minutes=cache.get('minutes'); }
谢谢您的详细描述,我理解您的意思。但是,我希望在单击中的按钮时将变量传递给onRun()函数。这意味着onRun(id,min)(或google.script.run.onRun(id,min))需要从HtmlService运行,而不是直接从gs文件运行。您不需要传递变量。您需要将这些值放入缓存或全局变量中。查看我的更新答案。我使用私有缓存进行了测试,它产生了一个错误,当我切换到公共缓存时,所有声明都正常工作。我发布了第二个答案,上面有我原来帖子的更新代码。
function doGet(e) {

  code here;

  onRun(id, minutes);
}

function onRun(argId, argMinutes) {
  Logger.log('argId: ' + argId);
  Logger.log('argMinutes: ' + argMinutes);
};
function doGet(e) {

    var id = e.parameter.id;
    var minutes = e.parameter.min;

  var cache = CacheService.getPublicCache();
  cache.put("id", id, 30);
  cache.put("minutes", minutes, 30);

  var html = '<p>'
    +'<button onClick=google.script.run.onRun()>Run without parameter</button>'
  +'<button onClick=google.script.run.turnOn()>On</button>'
  +'<button onClick=google.script.run.turnOff()>Off</button>'
  +'</p>';

  return HtmlService.createHtmlOutput(html).setSandboxMode(HtmlService.SandboxMode.IFRAME);

}

function onRun(id){
  var cache = CacheService.getPublicCache();
var id = cache.get('id'));
var minutes = cache.get('minutes'));
}