我正在开发Google Apps脚本。我的情况是我有一个index.html文件和其他一些应该共享菜单的文件。 因此,我有如下功能
function include(File) {
return HtmlService.createHtmlOutputFromFile(File).getContent();
};
并使用
<?!= include('leftMenu'); ?>
将其包含在我的html文件中。 我遇到的问题是,在包含的文件中有一个名为的函数,在我的Code.gs
中定义<div class="leftmenu">
Main menu<br>
<?var url = getScriptUrl();?><a href='<?=url?>?page=newInvoice'>New invoice</a><br>
<?var url = getScriptUrl();?><a href='<?=url?>?page=index'>Home</a>
</div>
只要这些行在&#34; main&#34;中,这个函数就像我期望的那样工作。 html文件,但如果它们在&#34;包含&#34; html文件。
我希望这是有道理的,有些人可以解释问题是什么,希望我能绕过它。
谢谢 尼尔
2016年12月14日编辑,试图准确解释我的问题是什么
我有一个名为“newinvoice.html”的html文件。 这里有javascript函数如下
<script type="text/javascript">
function formSubmit() {
google.script.run.withSuccessHandler(updateUrl).onSubmitButton(document.forms[0]);
}
function updateUrl(url) {
var successMsg = document.getElementById('output');
successMsg.innerHTML = 'New invoice created, saved and sent per Email';
}
</script>
我可以按照您的建议将这些函数移动到单独的html文件中。这称为menu_JS.html,包含在我的主文件中 这非常有效。
我打电话给其中一个这些函数 - 也在主html“newinvoice.html”中,如下所示
<div class="leftmenu">
Main menu<br>
<?var url = getScriptUrl();?><a href='<?=url?>?page=newInvoice'>New invoice</a><br>
<?var url = getScriptUrl();?><a href='<?=url?>?page=index'>Home</a>
</div>
如果我将其移到单独的文件“leftMenu.html”中并将其包含在“newinvoce.html”中 然后输出不再有效。
看起来脚本试图在包含文件之前运行而不是包含然后执行,就像我习惯使用PHP一样。
与往常一样,我感谢愿意花时间帮助我的人。这令人沮丧。谢谢!
答案 0 :(得分:0)
创建另一个HTML文件,并将要运行客户端的脚本放在该文件中。然后使用相同的include语句来包含该文件。
因此,请在 menu_JS.html 中将您的函数放在脚本标记之间:
<script>
firstFunction(){
alert("In the first function");
}
secondFunction(){
alert("In the second function");
}
</script>
在您的主HTML模板文件中,最好在正文加载后放置:
<?!= include('menu_JS'); ?>
请注意,脚本位于HTML文件中,而不是脚本文件。
编辑: 2016年11月15日 以下是我所拥有的功能的变化,它正在满足我的需求。请注意,我正在评估包含的html文件。我之前使用的代码与你的(注释掉的)更相似,并且在不久前将其更改为:
function include(filename) {
// return HtmlService.createHtmlOutputFromFile(filename)
return HtmlService.createTemplateFromFile(filename).evaluate()
.getContent();
}
//function includeRaw(filename) {
// return HtmlService.createTemplateFromFile(filename).getRawContent();
//}
这就是我加载初始html文件的方式。这通常在doGet()函数中,但可能在其他地方
var result=HtmlService.createTemplateFromFile('GridView').evaluate()
.setTitle('Boxwood Registrations')
.setWidth(1285)
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
return result;