1

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

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

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

4

2 回答 2

2

我将继续创建两个脚本:核心功能将部署为 Web 应用程序,一个简单的容器绑定脚本将提供一个接口来调用 Web 应用程序。

由于 Web App 未绑定到文档,因此您可能需要遵循以下方案:

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

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

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

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

或使用UrlFetchApp获取结果并将其显示在 UI 中。

不幸的是,这与在所有文档中自动添加功能不同,而是一种在要添加功能的每个文档中仅安装一个相对轻量级的钩子的方法,而不是完整的脚本。我不知道有任何方法可以实现这一目标。请注意,当您制作文档的副本时,该副本将包含其所有脚本,因此您可以为需要附加功能的文档创建模板。如果您希望混合和匹配多个脚本,这可能会得到确认。

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

于 2013-09-18T11:11:59.187 回答
0

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

即使我不知道您的脚本中有什么以及您是如何编写的,我猜它指的是您将其绑定为“活动文档”的文档,这可能是最重要的问题,因为 webapp 没有附在上面的文件。

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

于 2013-08-22T08:13:12.303 回答