将容器绑定的Google Apps脚本部署为Web App

时间:2013-08-22 07:57:53

标签: google-apps-script deploying

我正在使用Apps脚本中的Google Docs API创建一个拼写检查程序(只是一个扩展了Google Doc功能的脚本),我不想让那些将其作为Web下载的用户使用此服务应用。问题是,当我在脚本编辑器中创建了我的(容器绑定)脚本时,它只能在我创建它的Google文档中使用 - 也就是说,如果我打开一个新文档,我就无法使用该脚本。

如果我“部署为Web应用程序”,将其提供给所有人并粘贴给定的URL,我会收到一条错误消息,指出该脚本需要一个名为doGet()的函数,该函数不在我的脚本中。

如何将我的脚本发布为常规网络应用程序?

2 个答案:

答案 0 :(得分:2)

我将继续创建两个脚本: 核心功能将部署为Web App,简单的容器绑定脚本将提供调用Web App的界面。

由于Web App未绑定到文档,因此您可能希望遵循此方案:

function doGet(e){
    if(e.parameter.docId){
        doStuff(DocumentApp.openById(e.parameter.docId));
    }
}

现在,当您部署应用程序时,您将获得一个链接,使您可以访问该功能。

从容器绑定脚本中,您可以添加一些UI(例如侧面板中的Anchor元素),该UI使用适当的参数链接到Web应用程序

ScriptApp.getService().getUrl() + "?docId=" + DocumentApp.getActiveDocument().getId()

或使用UrlFetchApp获取结果并在界面中显示。

不幸的是,这与在所有文档中自动添加功能不同,而是在每个要添加功能的文档中仅安装相对轻量级的挂钩,而不是完整脚本。 我不知道有任何方法可以实现这一点。请注意,在制作文档副本时,副本将包含其所有脚本,以便您可以为需要其他功能的文档创建模板。如果你想混合和匹配多个脚本,这可能会变得很麻烦。

我的方法的优点是,如果您修改核心功能,更改将立即可供您使用它的所有文档使用,而无需更新其脚本。另一方面,如果容器脚本需要与UI进行大量交互,则可能会变得复杂并降低在两个脚本中分离它的实用性。

答案 1 :(得分:0)

答案在你的问题中:你的脚本的主要功能(构建UI的主要功能)必须被称为doGet()(这是任何GAS webapp的传统入口点,你隐式调用的函数打开webapp网址时...)但我担心这不会解决你的问题......

即使我不知道你的脚本中有什么以及你是如何编写它的,我猜它指的是你将它绑定为“活动文档”的文档,这可能是自从a以来最重要的问题。 webapp没有附加文档。

除此之外,拼写检查器如何作为独立应用程序工作?你能更清楚地解释一下你想做什么吗?