【问题标题】:Google apps script ScriptApp.getService().getUrl() always returns the wrong URLGoogle 应用脚本 ScriptApp.getService().getUrl() 总是返回错误的 URL
【发布时间】:2021-01-27 23:34:02
【问题描述】:

根据文档,此方法应返回 Web 应用的 URL:

“如果已部署,则返回 Web 应用的 URL;否则返回 null。如果您正在运行开发模式 Web 应用,则返回开发模式 url。”

我们有一个 Google 日历插件,其中我们使用 HtmlService 将自定义设置页面 (html) 交付给客户,但我不知道 ScriptApp.getService().getUrl() 如何与版本化部署一起使用。

这是一个有趣的场景:

在一个新的 Google Script 项目中,我们从清单文件(不是 webapp,尽管清单上有“webapp”部分)进行部署

  1. 清单中的第一个版本化部署:

    ScriptApp.getService().getUrl() 正确返回https://script.google.com/a/gong.io/macros/s/AKfycbzR21YpWNakFEisFcW1zo-tArveQ5nXj_gTRYLF4OZWkMf_Gun8Q3I2WZncfLSbjKEr/exec

    版本化部署 ID:AKfycbzR21YpWNakFEisFcW1zo-tArveQ5nXj_gTRYLF4OZWkMf_Gun8Q3I2WZncfLSbjKEr

  2. 进行了一些更改,创建了新的版本化部署

    ScriptApp.getService().getUrl() 正确返回https://script.google.com/a/gong.io/macros/s/AKfycbxXBdBXAV7olI0NGe-uS0_4FEFZPPNXLVHml6NNNW9zYf1fLOqfLhLYsaz6FTmjduIq/exec

    版本化部署 ID:AKfycbxXBdBXAV7olI0NGe-uS0_4FEFZPPNXLVHml6NNNW9zYf1fLOqfLhLYsaz6FTmjduIq

  3. 我们已经通过 Publish->Deploy as web app... 部署了脚本 可能在我们的生产脚本中错误地这样做了

    网络应用 URL 是 https://script.google.com/a/gong.io/macros/s/AKfycbzv1gX4eim1CzTjnFc4sFNvLMw9mXCfOv4laDu-_9AKefk5jXg/exec

  4. 脚本的另一轮代码更改。这次我们从清单部署:

    ScriptApp.getService().getUrl() 不正确返回https://script.google.com/a/gong.io/macros/s/AKfycbzv1gX4eim1CzTjnFc4sFNvLMw9mXCfOv4laDu-_9AKefk5jXg/exec

    版本化部署 ID:AKfycbx29Pcs8_cpEkodrfWGklz8t_OAs87OBSEtxLMkStrya64wUV4M2ePW_tNTTWlq0_T1

请注意,这一次 - 我们得到的是 webapp 部署 ID,而不是版本化部署 ID。

从现在开始,无论我尝试过什么 - 无论我们做什么,我都会得到https://script.google.com/a/gong.io/macros/s/AKfycbzv1gX4eim1CzTjnFc4sFNvLMw9mXCfOv4laDu-_9AKefk5jXg/exec

  1. 删除所有版本化部署并创建一个新的
  2. 禁用的网络应用程序

到目前为止,我所做的一切都以ScriptApp.getService().getUrl() 返回此 URL 结束。

如何重置它并让getUrl() 返回版本化部署 ID 而不是不存在的 webapp 部署 ID?

编辑:错别字

【问题讨论】:

  • 我无法重现同样的行为。 getUrl() 返回 /dev URL 如果我已经从 manifest 部署了一个新版本但没有通过 Publish > Deploy as web app... 部署 web 应用程序。您能否分享与清单文件相关的代码,以防我遗漏了什么?此外,当以Deploy as web app... 发布时,会出现以下消息:A new link will be given when you click Update. The current link will continue to work。因此,似乎以这种方式部署 Web 应用程序时,会生成一个新 URL,该 URL 会覆盖从清单创建的 URL,但两者都有效。
  • 考虑到这一切,您使用 URL 做什么?如果我可能会问,为什么通过Deploy as web app... 创建的不合适,而您想要与从清单部署的版本相对应的版本?
  • 我们为插件设置托管了几个 HTML,并且不想在我们的日历插件中手动更新 URL。
  • 对我来说 getUrl() 返回了正确的版本。这是在 Google 日历上的实际设置 URL 上测试的(而不是从编辑器执行该功能 - 实际上它是 /dev URL)。那么ScriptApp.getService().getUrl()到底返回了什么?如果我使用Publish > Deploy as web app...部署了多个版本?
  • 最好在问题跟踪器中创建问题。有关详细信息,请参阅tag info page

标签: google-apps-script web-applications


【解决方案1】:

已确认,这是新版本编辑器中的错误。更改为旧版本的编辑器并发布网络应用程序为我解决了这个问题。

通常,脚本的每次发布/发布的 URL 都保持不变。但是使用新编辑器时,发布 URL 似乎已更改,而 ScriptApp.getService().getUrl() 正在返回“旧” URL。

但更奇怪的是,“Test Web App”版本的发布似乎工作正常,只是部署的版本没有反映变化?

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。 我通过切换到旧版编辑器来修复它,并使用旧版编辑器发布应用程序。

    这对我有用。

    【讨论】:

      【解决方案3】:

      来自https://issuetracker.google.com/issues/170799249#comment30(我自己的评论)

      几天前,Google 可以为现有部署创建和分配版本。见Release Notes 2021-03-15

      【讨论】:

        【解决方案4】:

        这可能是一个错误。

        此问题已在问题跟踪器中报告(我猜你是这样做的),现在它已在内部转发。在此处发布以提高知名度:

        受此影响的任何人,请点击左上角的星号。

        【讨论】:

        • 我只花了大约 1 个月的时间就达到了这一点,这被认为是一个错误。刚来这里是为了准确地发布您的答案:-) 谢谢!
        猜你喜欢
        • 1970-01-01
        • 2022-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-09
        相关资源
        最近更新 更多