Mat*_*t W 1 html javascript google-sheets google-apps-script
我无法让我的基于 Apps 脚本的 HTML 包含任何脚本。
我doGet的HtmlService工作正常:
function doGet() {
return HtmlService.createHtmlOutputFromFile('myhtmlfilename');
}
Run Code Online (Sandbox Code Playgroud)
无论我的 HTML 文件上是否有任何脚本标签,我似乎都会得到以下信息:
我曾尝试将我的所有 JavaScript 存储在一个带有标签(称为JavaScript.html)的单独 HTML 文件中,然后使用强制打印脚本将它们重新包含到我的 HTML 中。
我的 HTML 文件包含我的脚本标签:
<script>
function transferItems(){
google.script.run.test();
}
</script>
Run Code Online (Sandbox Code Playgroud)
我将脚本 HTML 包含为 scriptlet 的函数,我也尝试将其作为“getRawContent”而不是“evaluate”:
function include(filename) {
return HtmlService.createTemplateFromFile(filename).evaluate().getContent();
}
Run Code Online (Sandbox Code Playgroud)
我的脚本:
<?!= include('JavaScript'); ?>
Run Code Online (Sandbox Code Playgroud)
我在 code.gs 中的函数称为test():
function test() {
alert("This is a test.");
}
Run Code Online (Sandbox Code Playgroud)
我的主 HTML 页面中的按钮,我试图通过该按钮调用该test()函数:
<button onClick="transferItems()">Transfer</button>
Run Code Online (Sandbox Code Playgroud)
无论我尝试什么,我的页面最终都会在浏览器中将这些 scriptlet 显示为文本。
我错过了什么?
我读过的所有答案和教程都来自 2015 年或更早。我觉得我正在关注 Google 的文档。
如果<?...?>在使用 HTMLService 进行评估时您的 HTML 文件中有scriptlet,则需要使用,createTemplateFromFile()否则它们将被视为纯文本。这createOutputFromFile()不适用于评估脚本标签。
function doGet() {
return HtmlService.createTemplateFromFile('myhtmlfilename').evaluate();
}
Run Code Online (Sandbox Code Playgroud)
编辑:您的包含不需要评估这些<? ?>脚本。所以它只需要是这样的:
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename).getContent();
}
Run Code Online (Sandbox Code Playgroud)
用我的手机接听,所以代码可能不完美。