Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在我的谷歌应用程序脚本/谷歌表单HTML中包含脚本?_Javascript_Html_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 如何在我的谷歌应用程序脚本/谷歌表单HTML中包含脚本?

Javascript 如何在我的谷歌应用程序脚本/谷歌表单HTML中包含脚本?,javascript,html,google-apps-script,google-sheets,Javascript,Html,Google Apps Script,Google Sheets,我无法使我的应用程序基于脚本的HTML包含任何脚本 我的HtmlService的doGet函数运行良好: function doGet() { return HtmlService.createHtmlOutputFromFile('myhtmlfilename'); } 无论我的HTML文件上是否有任何脚本标记,我似乎都会得到以下信息: 我已经尝试将我的所有JavaScript存储在一个单独的HTML文件中,其中包含名为JavaScript.HTML的标记,然后使用force print S

我无法使我的应用程序基于脚本的HTML包含任何脚本

我的HtmlService的doGet函数运行良好:

function doGet() {
return HtmlService.createHtmlOutputFromFile('myhtmlfilename');
}
无论我的HTML文件上是否有任何脚本标记,我似乎都会得到以下信息:

我已经尝试将我的所有JavaScript存储在一个单独的HTML文件中,其中包含名为JavaScript.HTML的标记,然后使用force print Scriptlet将它们重新包含到我的HTML中

包含脚本标记的我的HTML文件:

<script>
function transferItems(){
google.script.run.test();
}

</script>
我的脚本:

<?!= include('JavaScript'); ?>
我试图通过主HTML页面中的My按钮调用测试函数:

<button onClick="transferItems()">Transfer</button>
无论我尝试什么,我的页面最终都会在浏览器中以文本形式显示这些脚本

我错过了什么

我读过的所有答案和教程都是2015年或更早版本的。 我觉得我在关注Google的文档。

如果在使用HTMLService进行评估时,HTML文件中有Scriptlet,则需要使用createTemplateFromFile,否则它们将被视为纯文本。createOutputFromFile无法用于评估脚本标记

function doGet() {
 return HtmlService.createTemplateFromFile('myhtmlfilename').evaluate();
}
编辑:您的include不需要评估那些scriptlet。所以它只需要像这样:

function include(filename) { 
return HtmlService.createHtmlOutputFromFile(filename).getContent();
}
用我的手机回答,所以密码可能不完美

如果在使用HTMLService进行评估时,HTML文件中有scriptlet,则需要使用createTemplateFromFile,否则它们将被视为纯文本。createOutputFromFile无法用于评估脚本标记

function doGet() {
 return HtmlService.createTemplateFromFile('myhtmlfilename').evaluate();
}
编辑:您的include不需要评估那些scriptlet。所以它只需要像这样:

function include(filename) { 
return HtmlService.createHtmlOutputFromFile(filename).getContent();
}

用我的手机回答,所以密码可能不完美

接受的答案对我有效,但我还想补充一点,您可以在模板中内联执行include逻辑,而不是创建单独的include函数。例如

<html>
<head>
    <?!= HtmlService.createHtmlOutputFromFile('ClientScript').getContent(); ?>
</head>
我遇到的唯一问题是编辑器不能很好地处理HTML中的JavaScript;我真的希望我可以使用这个方法来包含.gs文件,以便在客户端和服务器之间重用功能


这里有一个参考页面,解释了如何使用这种方法分离CSS和JavaScript文件:

接受的答案对我有效,但我还想补充一点,您可以在模板中内联执行include逻辑,而不是创建单独的include函数。例如

<html>
<head>
    <?!= HtmlService.createHtmlOutputFromFile('ClientScript').getContent(); ?>
</head>
我遇到的唯一问题是编辑器不能很好地处理HTML中的JavaScript;我真的希望我可以使用这个方法来包含.gs文件,以便在客户端和服务器之间重用功能


下面是一个参考页面,它解释了如何使用此方法分离CSS和JavaScript文件:

查看HTMLService的createTemplateFromFile:感谢您的响应,Chris。在我发布我的问题之前,我确实读过那篇文章。我一定是执行不正确,但我不知道我做错了什么。对不起,我现在正在打电话。我回来后会看看我能做些什么。你能用HTMLDevice和UI发布你的部分代码吗?克里斯,谢谢你花时间看这个。我编辑了我的帖子以包含更多信息。不确定这是否是您所需要的所有内容。请查看HTMLService的createTemplateFromFile:谢谢您的回复,克里斯。在我发布我的问题之前,我确实读过那篇文章。我一定是执行不正确,但我不知道我做错了什么。对不起,我现在正在打电话。我回来后会看看我能做些什么。你能用HTMLDevice和UI发布你的部分代码吗?克里斯,谢谢你花时间看这个。我编辑了我的帖子以包含更多信息。不确定这是否是你所需要的一切。差不多就这些了!它不再将scriptlet显示为文本。它还必须按预期工作,因为当我单击按钮时,控制台中出现的错误是“未定义警报”。因此,它包含了第二个html文件以及包含transferItems函数的脚本。但是,一旦google.script.run尝试调用测试函数,我就会收到该警报。我不会让警报正常工作,因为它是从html JavaScript外部调用的。。。但当我在接电话时,我无法测试。。。我将在一个小时后到家,我可以进行更多的测试。我尝试了使用不同的功能,而不是警报,它工作了!非常感谢,@Chris W。我很好奇为什么警报功能不起作用。这不是一个标准的javaScript函数吗?或者是因为我在应用程序脚本中调用它,而不是直接在html中调用它好的,你已经回答了。再次感谢,差不多了!它不再将scriptlet显示为文本。它还必须按预期工作,因为当我单击按钮时,控制台中出现的错误是“未定义警报”。因此,它包含了第二个html文件以及包含transferItems函数的脚本。但是,一旦google.script.run尝试调用
st函数,我得到了这个警报。我不会让警报工作,因为它是从html JavaScript外部调用的。。。但当我在接电话时,我无法测试。。。我将在一个小时后到家,我可以进行更多的测试。我尝试了使用不同的功能,而不是警报,它工作了!非常感谢,@Chris W。我很好奇为什么警报功能不起作用。这不是一个标准的javaScript函数吗?或者是因为我在应用程序脚本中调用它,而不是直接在html中调用它好的,你已经回答了。再次感谢。