如何在Google App Script / Google sheet html中包含脚本?

时间:2018-02-17 16:48:09

标签: javascript html google-apps-script google-sheets

我无法将基于App Script的html包含在任何脚本中。

我的HtmlService的doGet函数:

function doGet() {
return HtmlService.createHtmlOutputFromFile('myhtmlfilename');
}

这很好用。

无论我的html文件是否有任何脚本标记,我似乎都得到以下内容:

errors

我尝试将所有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显示为文本。

displayed result

我错过了什么?

我读过的所有答案和教程均来自2015年或更早。 我觉得我正在关注谷歌的文档。 任何帮助表示赞赏。我当然是非常新的,我可能会错过一些非常简单的东西,但这让我很疯狂。

2 个答案:

答案 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/