【问题标题】:Break Google Apps HTMLService Page into multiple .html files将 Google Apps HTMLService 页面拆分为多个 .html 文件
【发布时间】:2015-06-18 15:27:25
【问题描述】:

我想将一些相关的 HTMLService 接口组合到一个标签页中。我可以让标签工作using the code here。但我想将每个 Tab 的页面放入项目中的不同 html 文件中。我将如何在下面的 div 中显示 Billets.html?基本上用 html 文件的内容替换“Put the Billet Locations here”。我的目标是加载一个 Main.html 文件并显示各种任务的选项卡,为每个选项卡的内容使用不同的文件以更好地组织项目。我还希望以最有效的方式加载每个项目,这意味着要么在选择选项卡时加载(给定用户可能永远不会选择它),要么在开始时全部加载。

<div id="tabs-2">
  <p>Put the Billet Locations App here</p>
</div>

【问题讨论】:

    标签: google-apps-script google-apps


    【解决方案1】:

    两个基本策略是:

    • 首次加载页面时注入所有 HTML
    • 在页面加载后注入 HTML,(例如当用户单击选项卡时)

    第一个策略可以用 scriptlet 完成:

    HTML Service: Templating

    index.html

    //include is the name of a function
    <div id="tabs-2">
      <?!= include("HTML_Tab2"); ?> //HTML_Tab2 is name of HTML file
    </div>
    

    code.gs

    doGet() {
      var template = HtmlService.createTemplateFromFile("index");
    
      return template
        .evaluate() // evaluate MUST come before setting the sandbox mode
        .setTitle("nameOfApp")
        .setSandboxMode(HtmlService.SandboxMode.IFRAME); //Also NATIVE
    };
    
    function include(filename) {
      return HtmlService.createHtmlOutputFromFile(filename).getContent();
    };
    

    为了使scriptlet 正确运行,必须使用HtmlService 方法createTemplateFromFile()。因为 index.html 文件中有一个 scriptlet,所以它是一个模板。

    另一种选择是对服务器进行单独的google.script.run 调用,获取 HTML,返回它,然后使用客户端 JavaScript 将 HTML 注入到该 P 标记中。

    Reference Guide- Google Documentation - Client side API

    对于该选项,您需要使用 DOM 属性 innerHTMLtextContent 来注入 HTML。

    Documentation innerHTML - Mozilla

    【讨论】:

    • 谢谢!使用模板方法:将 SandboxMode 设置为 IFRAME 会破坏选项卡。如果我将其保持为 NATIVE,则选项卡将起作用,并且包含第二个文件。所以我要么需要弄清楚标签,要么看看 NATIVE 是否会破坏任何东西。我还需要处理包含页面的布局。它是为不同的输出大小创建的,所以我需要更好地定义布局。
    • 方法一被证明是一个不太理想的解决方案,因为注入的 HTML 会因某些设置而变化太大。如果使用方法 2,有没有办法在注入的 HTML 中包含可运行脚本?
    • 好问题。如果您在页面加载后的&lt;script&gt;&lt;/script&gt; 标签 中注入客户端脚本,我认为您无法直接运行该代码。但是,您可以获取 JavaScript 代码,然后使用 new Function() 创建一个函数,然后运行它。创建新函数的代码需要从一开始就加载。见 Function() 构造函数Link to some information
    • "创建新函数的代码,需要从一开始就加载。" - 什么开始? “新功能”似乎是无名的,所以我有限的知识并没有告诉我如何从注入的 HTML 访问多个功能。现在,为每个注入的 HTML 文章命名为唯一的客户端函数并在开始时将它们全部加载可能会更容易。我希望通过不断变化的 DOM 属性来加载/卸载它。 (在我上次发表评论之前,我确认注入的 HTML 中的“”标签中的脚本不起作用。我很抱歉没有提及这一点。)
    • 最开始 = 首次加载 HTML 时。这种情况只会发生一次,除非重新打开侧边栏或对话框,或者使用 Web 应用将 HTML 提供给浏览器选项卡。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    相关资源
    最近更新 更多