首页 文章

使用HtmlService从谷歌应用程序脚本谷歌关闭库使用

提问于
浏览
1

是否可以通过HtmlService从谷歌应用程序脚本访问谷歌闭包库功能?谷歌脚本中的html文件似乎过滤掉了与闭包库相关的任何内容 .

项目:我正在使用HtmlService从谷歌应用程序脚本中探索谷歌闭包库中的DOM操作实用程序 . 我打算将它作为一个独立的Web应用程序运行 .

闭包函数在从本地客户端环境直接加载到浏览器时起作用 - 但是当通过HtmlService实用程序从GAS应用程序注入时它们不起作用 .

这是我在GAS中使用的代码 .

html文件

<html>
  <head>
  <script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
  <script>
    goog.require('goog.dom');
    function c_sayHi() {
      var newHeader = goog.dom.createDom('h1', {'style': 'background-color:#EEE'},'Hello world!');
      goog.dom.appendChild(document.body, newHeader);
    }
  </script>
  </head>

  <script>
    function c_updateButton(date, button) {
      button.value = "clicked at " + date;
    }
  </script>

  <body onload="c_sayHi()">
    <input type='button' value='Never Clicked'
    onclick='google.script.run.withSuccessHandler(c_updateButton).withUserObject(this).s_getCurrentDate()'>

    <input type='button' value='Never Clicked'
    onclick='google.script.run.withSuccessHandler(c_updateButton).withUserObject(this).s_getCurrentDate()'>
  </body>
</html>

Google Script文件

function s_getCurrentDate() {
  return new Date().toString();
}

function doGet(e) {
  return HtmlService.createTemplateFromFile('hello').evaluate();
}

我为客户端函数添加了前缀c_,为服务器端fns添加了s_ . 当将其作为Web应用程序运行时,

有没有办法让关闭库像上面尝试的那样从Web应用程序中运行?

2 回答

  • 2

    问题是Closure的依赖结构在窗口加载事件之前执行,否则它将无法工作 . 因此,在窗口加载之前,任何require和provide语句都会被处理掉 . 当您通过HTML服务注入它们时,您将强制它们在需要的不同阶段执行,这会导致一切都失败 .

    如果您将使用COMPILED Closure库源,则运行Closure时不会有任何问题 . 了解如何使用Compiler和Builder使Closure正常工作 . 此外,您可以使用延迟加载来模拟HTML服务 .

    有了这个, you can make javascript load dynamically onclick, onload or whatever the hell you want . 这称为延迟加载,它被用作所有大型Web应用程序的标准实践 . 浏览Gmail或Facebook时,监控Firebug的“网络”选项卡 .

    Arun Nagarajan是对的,jQuery是更简单的解决方案 but 如果你正在做一些需要广度,规模和速度的东西,jQuery是一个适合孩子的玩具 .

  • 3

    这里有几件事 -

    • 所有.gs文件都是在服务器端运行的JavaScript . 所以DOM在那里并不真正相关 .

    • 您可以通过返回HtmlService中的代码来运行客户端JavaScript . 这就是我认为你想做的事情 . 但是,jQuery是这种方法中受支持最多的库 . 关闭可能最终工作,但团队没有专门测试该库 .

相关问题