是否可以通过HtmlService从谷歌应用脚本访问谷歌闭包库功能?谷歌脚本中的html文件似乎过滤掉了与闭包库相关的任何内容。
项目:我正在使用HtmlService从谷歌应用程序脚本中的Google Closure库中探索DOM操作实用程序。我打算将它作为一个独立的网络应用运行。
当从本地客户端环境直接加载到浏览器中时,闭包函数会起作用 - 但是当通过HtmlService实用程序从GAS应用程序注入时它们不起作用。
以下是我在GAS中使用的代码。
<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>
function s_getCurrentDate() {
return new Date().toString();
}
function doGet(e) {
return HtmlService.createTemplateFromFile('hello').evaluate();
}
我为客户端函数添加了前缀c_,为服务器端fns添加了s_。将其作为Web应用程序运行时,
函数c_sayHi无效 - 我不确定它是否被调用。
函数s_getCurrentDate和c_updateButton正常工作,如google文档https://developers.google.com/apps-script/html_service中所述。
有没有办法让关闭库在上面尝试的Web应用程序中运行?
答案 0 :(得分:3)
这里有几件事 -
答案 1 :(得分:2)
问题是Closure的依赖结构在窗口加载事件之前执行,否则它将无法工作。因此,在窗口加载之前,任何require和provide语句都会被处理掉。当您通过HTML服务注入它们时,您将强制它们在需要的不同阶段执行,这会导致一切都失败。
如果您将使用COMPILED Closure库源,则运行Closure时不会有任何问题。了解如何使用编译器和构建器使Closure正常工作。此外,您可以使用延迟加载来模拟HTML服务。
有了这个,你可以动态地加载javascript,onload,onload或者你想要的任何东西。这称为延迟加载,它被用作所有大型Web应用程序的标准实践。浏览Gmail或Facebook时,监控Firebug的“网络”选项卡。
Arun Nagarajan是对的,jQuery是更容易的解决方案但如果你正在做一些需要广度,规模和速度的东西,jQuery是一个适合孩子的玩具。