【问题标题】:Deploying container-bound Google Apps Script as Web App将容器绑定的 Google Apps 脚本部署为 Web 应用程序
【发布时间】:2023-04-02 11:28:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: google-apps-script deploying


    【解决方案1】:

    我将继续创建两个脚本: 核心功能将被部署为 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 进行大量交互,则可能会变得复杂并降低将其分成两个脚本的实用性。

    【讨论】:

      【解决方案2】:

      答案就在你的问题中:你的脚本的主函数(构建 UI 的那个)必须被称为doGet()(这是任何 GAS webapp 的常规入口点,你在打开时隐式调用的函数webapp url)...但恐怕这不会解决您的问题...

      即使我不知道您的脚本中有什么内容以及您是如何编写的,我猜它指的是您将其绑定为“活动文档”的文档,这可能是自webapp 没有附加文档。

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

      【讨论】:

      • 当然!我想创建一个应用程序来检索一个(或多个)单词,然后通过 XHR(UrlFetchApp)将单词发送到服务器,在那里检查拼写错误/单词预测,然后作为 JSON 对象返回 - 这个部分已经处理好了。我想做的事情是让脚本将自己绑定到用户正在查看的任何文档,并在整个 Google Docs 中具有相同的功能。有什么想法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多