如何在谷歌网站链接谷歌应用程序脚本

时间:2012-01-20 03:09:54

标签: hyperlink google-apps-script google-sites

我正在为我的公司创建一个谷歌网站,我正在利用谷歌应用程序脚本在网站上做一些额外的工作。我真的想将脚本链接到我制作的下拉菜单。但是,我无法弄清楚如何链接脚本。我知道如何将脚本链接为谷歌小工具和独立链接,但我真的希望在我点击下拉菜单中的项目时运行脚本。

2 个答案:

答案 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。

  • HTML Service - 与普通HTML非常相似,您可以插入HTML表单和输入标记。
  • UI Service - 与java(就布局管理器而言)非常相似,请参见下文。
  • GUI Builder - 我建议先手动完成,以便更好地了解布局。

在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 =事件函数名,只是为了说明它们是如何相关的。