我无法将基于App Script的html包含在任何脚本中。
我的HtmlService的doGet函数:
function doGet() {
return HtmlService.createHtmlOutputFromFile('myhtmlfilename');
}
这很好用。
无论我的html文件是否有任何脚本标记,我似乎都得到以下内容:
我尝试将所有javaScript存储在带有标记的单独html文件中(称为JavaScript.html),然后使用强制打印scriptlet将它们包含在我的html中。
我的html文件包含我的脚本标记:
<script>
function transferItems(){
google.script.run.test();
}
</script>
我的功能是将脚本html包含为scriptlet,我也尝试将其作为'getRawContent'而不是'evaluate':
function include(filename) {
return HtmlService.createTemplateFromFile(filename).evaluate().getContent();
}
我的scriptlet:
<?!= include('JavaScript'); ?>
我的code.gs中的函数,名为test():
function test() {
alert("This is a test.");
}
我的主要html页面中的按钮,我试图通过它调用test()函数:
<button onClick="transferItems()">Transfer</button>
无论我尝试什么,我的页面最终都会在浏览器中将这些scriptlet显示为文本。
我错过了什么?
我读过的所有答案和教程均来自2015年或更早。 我觉得我正在关注谷歌的文档。 任何帮助表示赞赏。我当然是非常新的,我可能会错过一些非常简单的东西,但这让我很疯狂。
答案 0 :(得分:0)
如果您使用HTMLService评估HTML文件中的<?...?>
scriptlet,则需要才能使用createTemplateFromFile()
,否则它们将被视为纯文本。 createOutputFromFile()
无法用于评估脚本标记。
function doGet() {
return HtmlService.createTemplateFromFile('myhtmlfilename').evaluate();
}
编辑您包含的内容不需要评估这些<? ?>
scriptlet。所以它只需要像这样:
function include(filename) {
return HtmlService.createHtmlOuputFromFile(filename).getContent();
}
使用我的手机回答,因此代码可能不完美。
答案 1 :(得分:0)
可接受的答案对我有用,但我还想补充一点,您可以在模板中内联执行包含逻辑,而不必制作单独的$return->ws_acquisition_date
$return->ph_acquisition_date
$return->ws_status
...
函数。例如...
include()
我唯一遇到的问题是编辑器不能与HTML的JavaScript 一起使用。我真的希望我可以使用此方法包括<html>
<head>
<?!= HtmlService.createHtmlOutputFromFile('ClientScript').getContent(); ?>
</head>
个文件,以便在客户端和服务器之间重新使用功能。
下面是供您参考的页面,该页面介绍了使用以下方法分离CSS和JavaScript文件:https://yagisanatode.com/2018/04/15/google-apps-script-how-to-create-javascript-and-css-files-for-a-sidebar-project-in-google-apps-script/