使用include来包含一个包含脚本的html文件

时间:2016-12-12 20:50:33

标签: google-apps-script

我正在开发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一样。

与往常一样,我感谢愿意花时间帮助我的人。这令人沮丧。谢谢!

1 个答案:

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