我有一个我作为网络应用发布的脚本。我想通过网络应用网址将参数传递给脚本,例如https://script.google.com/a/...JS0AsIOipm/exec?year=2016&festival=Canada
并最终将它们传递到客户端脚本,使用它们来设置默认的表单字段值。
我尝试过一些事情,而我能得到的最远的是:在Code.gs中,我全局定义一个变量,将其设置为传递的参数
//Define this here globally so it is accessed in the HTML Template
var passedParameter;
/**-----------------------------------------------------------------------------------
|
| Begin section for app interface
|
------------------------------------------------------------------------------------*/
// Script-as-app template.
function doGet(passed) {
if(passed.parameter.festival && passed.parameter.year){
passedParameter = passed.parameter;
}
var result=HtmlService.createTemplateFromFile('GridView').evaluate()
.setWidth(1285);
return result;
}
//Allow us to include other files in the HTML
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename)
.getContent();
}
GridView.html包含:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<script>
var passedData = "<?!= passedParameter ?>"; //Stores the data directly in the javascript code
</script>
<body>
<p>passed=<?!= passedParameter.year ?></p>
</body>
<?!= include('GridView_JS'); ?>
</html>
哪个显示passParameter.year的值
所以它包括GridView_JS.html。这是我想要使用过去的一年和节日的价值观的地方。该文件具有以下功能:
<script>
function showMenuYear(menuItems) {
var list = $('#optionListYear');
var desiredValue = passedData.festival + ' ' + passedData.year;
for(var i=0; i<list.options.length; i++) {
if ( list.options[i].text == desiredValue ) {
list.selectedIndex = i;
break;
}
}
}
</script>
但是错误说明未定义传递参数。我该如何使用它们?我知道我正在传递passParameter.year并传递了Parameter.festival,因为它能够在第一个HTML文件中显示它们。
那么我需要做些什么才能在我的脚本中使用它们?
答案 0 :(得分:1)
有许多事情需要发生。
将两个scriptlet添加到&#;; GridView_JS&#39;中的JavaScript代码中。文件:
var desiredValue = <?!= passedParameter.festival ?> + ' ' + <?!= passedParameter.year ?>;
但您还必须确保include()
函数使用.evaluate()
;
HtmlService.createTemplateFromFile(fileName).evaluate();
目前,您的include
功能使用:createHtmlOutputFromFile()
需要将其替换为createTemplateFromFile(fileName).evaluate()
那么,会发生什么,include()
函数将首先评估&#39; GridView_JS&#39;文件,然后评估GridView.html文件。
还有其他选择。您可以将传入的参数放入临时缓存或属性服务中。缓存是临时的,属性服务是永久性的。然后,当加载HTML时,您可以从onload
事件运行JavaScript,并调用服务器以从属性服务缓存中获取值。但是,如果您希望HTML中立即可用的值,那么这样做是没有意义的。根据具体情况了解替代方案是很好的。