我能够从已发布的应用脚本的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);
}
答案 0 :(得分:1)
使用全局变量,或将值放入缓存中。
要声明全局变量,请在函数外部声明变量:
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
代码。
我在onRun()
函数中看不到任何调用doGet()
函数的内容。
你可以从doGet()
功能中调用另一个功能,只要它 {em}之前的 {em} {/ 1}}。 return
在此时停止了该功能。
return
你不能拥有:
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);
的HTML脚本标记运行:
window.onload = function() {code};
要传递多个变量,只需用逗号分隔:
<script>
window.onload = function() {
console.log("This onload did run");
code here;
};
</script>
答案 1 :(得分:1)
诀窍是使用公共缓存(谢谢Sandy Good)。
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'));
}