首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Google Apps脚本中使用HTMLOutput中的scriptlet

如何在Google Apps脚本中使用HTMLOutput中的scriptlet
EN

Stack Overflow用户
提问于 2014-12-17 01:52:12
回答 1查看 8.5K关注 0票数 4

我正在使用以下命令加载模式对话框:

代码语言:javascript
复制
 var html = HtmlService.createHtmlOutputFromFile('File')
    .setSandboxMode(HtmlService.SandboxMode.IFRAME)
    .setWidth(1000)
    .setHeight(700);

 SpreadsheetApp.getUi() 
    .showModalDialog(html, 'My Page');

现在,在File.HTML中,我想加载另一个带有CSS设置的超文本标记语言文件,我该怎么做?

我尝试使用scriptlet在HtmlTemplate中包含它,但不起作用:

代码语言:javascript
复制
<?!= include('File'); ?>

编辑:

我在code.gs中定义了include函数:

代码语言:javascript
复制
function include (file) {
  return HtmlService.createTemplateFromFile(file).evaluate().getContent();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-17 02:42:30

问题是您使用的是:

代码语言:javascript
复制
createHtmlOutputFromFile

而不是:

代码语言:javascript
复制
createTemplateFromFile

您需要创建一个模板:

这就是你所看到的:

scriptlet未运行,但被解释为文本。

这是您想要看到的:

下面是代码应该是什么样子:

Code.gs

代码语言:javascript
复制
// Use this code for Google Docs, Forms, or new Sheets.
function onOpen() {
  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
      .createMenu('Dialog')
      .addItem('Open', 'openDialog')
      .addToUi();
}

function openDialog() {
  var html = HtmlService.createTemplateFromFile('index')
    .evaluate();//This is necessary

    SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
    .showModalDialog(html, 'Dialog title');
}

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

index.html

代码语言:javascript
复制
<?!= include('File'); ?>

Hello, world!
<input type="button" value="Close"
  onclick="google.script.host.close()" />

File.html

代码语言:javascript
复制
<div>
    This is a test. it worked!
</div>

基本上,你需要改变:

代码语言:javascript
复制
var html = HtmlService.createHtmlOutputFromFile('index')

至:

代码语言:javascript
复制
var html = HtmlService.createTemplateFromFile('index')

从文件创建模板

我还将代码更改为:

代码语言:javascript
复制
function openDialog() {
  var html = HtmlService.createTemplateFromFile('index')
    .evaluate()
    .setSandboxMode(HtmlService.SandboxMode.IFRAME);

原始答案:

include不同于keyword或内置函数。您需要在名为include.gs脚本文件中创建一个函数。

代码语言:javascript
复制
    function include(filename) {
      return HtmlService.createHtmlOutputFromFile(filename).getContent();
    };

此外,您不能将HTML服务和UI服务混合在一起。我不知道这是不是你想要做的,但我想我应该提一下。

这里的文档中描述了您要完成的任务:

Documentation - Best Practices

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27510858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档