我正在为我的公司创建一个谷歌网站,我正在利用谷歌应用程序脚本在网站上做一些额外的工作。我真的想将脚本链接到我制作的下拉菜单。但是,我无法弄清楚如何链接脚本。我知道如何将脚本链接为谷歌小工具和独立链接,但我真的希望在我点击下拉菜单中的项目时运行脚本。
答案 0 :(得分:0)
出于安全原因,Google不允许您将JavaScript放入Google协作平台。 它们提供的是应用程序脚本,但是当它们在一个孤立的世界(在服务器而不是浏览器上)上工作时,它非常棘手并且有它的方式。
因为它与标准页面的javascript非常不同,所以您必须根据应用程序脚本允许的内容重新考虑您的目标。
Google Apps Scripts允许您构建用户界面(使用其实验性UI API),该界面可在整页中显示为独立脚本,或插入站点中的iframe。这意味着您不会有覆盖您网站的下拉菜单:您需要一个静态空间来显示您的脚本的UI。
还有另一种更原始的方法可以在您的站点中“嵌入”脚本命令:使用链接。触发脚本的链接,即使使用您自己的参数,也只能运行de命令,但没有任何UI。您可以创建一个包含选项的菜单,每个选项都会激活一个脚本。但我不是在谈论下拉菜单。
关于Google Apps脚本用户界面
答案 1 :(得分:0)
不确定“链接脚本”是什么意思,你有其他地方的代码吗?通过“链接”听起来你的意思是用事件处理程序“调用”代码。我将向您展示如何使用由GUI ListBox Change事件或Button Click事件触发的ServerHandler调用函数。
在Google Apps Scrips(GAS)中,有三种方法可以执行GUI。
在Google协作平台中,您可以直接添加大多数HTML而无需脚本。 UI服务和GUI Builder将为您生成HTML表单标签,因为除非您执行某些代码,否则很少有任何理由插入GUI元素,您可能要开始使用这些代码。
Here is a Drop-Down list example进行了一些更改,以显示如何从多个UI元素(有时称为Widgets)调用处理函数以及如何使用该参数:
function doGet(e) { // use doGet() & UiApp to make a canvas.
var app = UiApp.createApplication();
var doEvent = app.createServerHandler('doEvent').setId('doEvent');
var myList = app.createListBox().setId('myList').setName('myList');
myList.addItem('one'); // add items, I use single quote strings.
myList.addItem('two').addItem('three') // I know it looks weird.
// Scripts let you do this, by returning self for your convenience.
.addChangeHandler(
app.createServerHandler('doEvent')
);
app.add(myList); // Add element to GUI.
doEvent.addCallbackElement(myList); // Add to Event Handler.
app.add(app.createButton('Click Me').setId('myButton')
.addClickHandler(doEvent));
return app;
} // Simple DropDown by Jason K.
function doEvent(e) { // use split() if isMultipleSelect is true
var app = UiApp.getActiveApplication();
app.add(app.createLabel(
'List Value is ' + e.parameter.myList
+ ' from ' + e.parameter.source));
return app;
}
就故障排除而言,请记住使用app.add()添加每个元素并返回app;在doGet和每个处理函数的末尾。
处理程序执行JavaScript onClick()或onChange()函数之类的函数,大多数UI在没有处理程序的情况下无用。 ClientHandler效率更高,但ServerHandler做得更多,从ServerHandler开始,任何简单的函数都可以转换为ClientHandler以获得更好的性能。您可以选择将处理程序空间分开或将其全部塞入一行代码中,这实际上是个人偏好的问题,但如果您计划将其用于多个GUI对象,请将其分配给变量。您可能希望查找不同的布局管理器以生成更多花哨的应用程序,或者只使用GUI Builder。还有其他创建函数,如app.createServerClickHandler(),但我知道那些是无用的,现在已弃用,所以忽略你发现的任何其他引用,但我们仍然使用addChangeHandler()和addClickHandler()到GUI元素自己。
setName()似乎很傻,只需要设置参数名称(我希望他们改变它)所以现在我建议将它设置为与元素id相同。我还使用了Handler的变量名=它的id =事件函数名,只是为了说明它们是如何相关的。