至少我希望能够将Session.getActiveUser.getEmail()
从脚本A传递到脚本B.
这就是我到目前为止......
// Script-as-app template.
function doGet() {
var app = UiApp.createApplication();
var button = app.createButton('Click Me');
app.add(button);
var handler = app.createServerHandler('myClickHandler');
button.addClickHandler(handler);
return app;
}
function myClickHandler(e) {
var url = "https://script.google.com/macros/s/AKfycbzSD3eh_SDnbA4a7VCkctHoMGK8d94SAPV2IURR3pK7_MwLXIb4/exec";
var payload = {
name : "Gene",
activeUser : Session.getActiveUser().getEmail(),
time : new Date()
};
var params = {
method : "post",
payload : payload
}
Logger.log("Hello World!");
var HTTPResponse;
try{
HTTPResponse = UrlFetchApp.fetch(url, params);
}catch(e){
Logger.log(e);
}
return HTTPResponse;
}
function doPost(e){
if(typeof e === 'undefined')
return;
var app = UiApp.createApplication();
var panel = app.add(app.createVerticalPanel());
for(var i in e.parameter){
panel.add(app.createLabel(i + ' : ' + e.parameter[i]));
Logger.log(i + ' : ' + e.parameter[i]);
}
ScriptProperties.setProperty('Donkey', 'Kong');
return app;
}
转到脚本A here页面加载按钮。单击该按钮会导致“Hello World!”要记录脚本A的项目日志,但脚本B项目的日志仍为空。 TryCatch不会记录任何错误。
答案 0 :(得分:6)
我相信你的问题是因为你试图将一个uiapp元素作为响应参数传递。
这里有一些html服务脚本的变化。
demo
脚本:
// #### Part A
function doGet(e) {
var html ="<input type='text' id='text' /><input type='button' onclick='myClick()' value='submit'>"; // a text to be passed to script B
html+="<div id='output'></div>"; // a place to display script B answer
html+="<script>";
html+="function myClick(){google.script.run.withSuccessHandler(showResults).myClickHandler(document.getElementById('text').value);}"; // handler to do the job in script A
html+="function showResults(result){document.getElementById('output').innerHTML = result;}</script>"; // function to show the result of the urlfetch (response of script B)
return HtmlService.createHtmlOutput(html);
}
function myClickHandler(text) {
var url = ScriptApp.getService().getUrl();
var payload = {
name : "Gene",
text : text,
time : new Date()
};
var params = {
method : "post",
payload : payload
}
Logger.log("text: "+text);
var HTTPResponse;
try{
HTTPResponse = UrlFetchApp.fetch(url, params);
}catch(e){
Logger.log(e);
}
return HTTPResponse.getContentText();
}
// ###### Part B
function doPost(e){
if(typeof e === 'undefined'){
return "e was empty!!";
}
var htmlOut="<ul>";
for(var i in e.parameter){
htmlOut+="<li>"+i+ " : " + e.parameter[i]+"</li>";
if(i=="text"){
htmlOut+="<li> Text hash : "+Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, e.parameter[i]))+"</li>";
}
}
htmlOut+="</ul>";
return ContentService.createTextOutput(htmlOut);
}
重要的是要注意,您将无法获取脚本B的记录器事件(因为当您不在那里时会触发它 - 您不是触发脚本B的人。这是脚本A那个触发器脚本B和脚本A在制作urlfetch时没有被识别为“你”。如果要获取脚本b logger的结果,则应将其返回到脚本a。 重要的是要注意:再次,当脚本A对脚本B执行UrlFetch时,它不会被识别为“你”,因此脚本B必须接受任何人打开(在“谁有权访问应用程序”下的发布选项中)你需要选择任何人甚至匿名)。
注意:我把所有东西放在同一个脚本中用于商品(你可以将它分成两个不同的脚本,这不是问题),因为B部分需要访问匿名人员,我无法自动检索电子邮件地址A部分所以我改变了一些在这里完成的工作。