gpt4 book ai didi

javascript - GAS HTMLService : Pushing variables with createTemplateFromFile in file included in template

转载 作者:行者123 更新时间:2023-11-30 19:13:34 25 4
gpt4 key购买 nike

我使用 CreateTemplateFromFile 并在我的模板中推送一个变量。我的模板文件包含另一个文件,但我无法将此变量推送到嵌入的第二个文件中。

下面是我尝试过的:

index.html:

<!DOCTYPE html>
<html>
<?!= include('header'); ?>
<?!= include('style'); ?>
<body>
...
</body>

<?!= include('script'); ?>

</html>

index.html 的脚本部分在单独的文件中:

<script>
function getData() {
$("#loadingMessage").html('Loading');
console.log('myContent:', <?= data ?>);
...
}
</script>

Google 应用程序脚本代码的 doGet 部分:

var template = HtmlService.createTemplateFromFile('index');
template.data = myContent;

return template.evaluate()
.setSandboxMode(HtmlService.SandboxMode.IFRAME);

变量已正确推送到 index.html 中,但未到达脚本部分。任何想法 ?也许还包括脚本文件作为模板?

最佳答案

如何在 Apps 脚本和 Javascript 之间传递变量。

Google Apps 脚本具有方法 google.script.run可以从 Web App 的 JS 部分调用.这些方法允许将参数传递给 Apps 脚本函数,并将 GAS 函数的返回值分配回 JS 函数。

示例:

.gs file

function doGet() {
var template = HtmlService.createTemplateFromFile('index');

return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);

}

function myContent(input) {
var myContent="foo"+input;
return myContent;
}

HTML/js file

<html>
<head>
<base target="_top">
</head>
<body onload="getData()">
<script>
function getData() {
google.script.run.withSuccessHandler(proceedData).myContent("bar");
...
}
function proccedData(returnValue) {
var data = returnValue;
}
</script>
</body>
</html>

如果你想使用scriptlet

documentation specifies :

  • 但是请记住,由于模板代码在页面提供给用户之前执行,因此这些技术只能将初始内容提供给页面。要以交互方式从页面访问 Apps 脚本数据,请改用 google.script.run API。

  • 因为 scriptlet 代码在页面提供之前执行,所以每个页面只能运行一次;与您通过 google.script.run 调用的客户端 JavaScript 或 Apps 脚本函数不同,scriptlet 无法在页面加载后再次执行。^

  • scriptlet 可以调用其他代码文件中定义的函数、引用全局变量,或使用任何 Apps 脚本 API。

在你的情况下,如果你想使用 scriptlet,你要么必须调用一个函数,要么使你的变量 data 全局化,例如:


//global variable
var data=myContent;

function doGet() {
var temp=HtmlService.createTemplateFromFile("index.html");
return temp.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

Also keep in mind:

  • 模板很难调试,因为您编写的代码不会直接执行;相反,服务器会将您的模板转换为代码,然后执行生成的代码。

关于javascript - GAS HTMLService : Pushing variables with createTemplateFromFile in file included in template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58238551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com