【问题标题】:Behavior of ScriptApp.getService().getUrl() seems to have changedScriptApp.getService().getUrl() 的行为似乎已经改变
【发布时间】:2020-03-09 15:46:12
【问题描述】:

总结

一段时间以来,我一直在使用ScriptApp.getService().getUrl() 在我的 Google Apps 脚本项目中成功获取当前实例 (dev|prod)。截至昨天,返回值似乎完全取决于 URL 是否以 /dev 结尾。有其他人看到这个问题或有解决方法吗?

以前的行为

getUrl 将始终返回 https://script.google.com/a/dustinluck.com/macros/s/{deployment-id}/exec。部署 ID 正是我在浏览器的 URL 栏中看到的。

当前行为

如果浏览器 URL 栏中的地址以 /dev 结尾,getUrl 总是返回 dev URL,否则返回 prod URL。首次显示 Web 表单时这不是问题,因为 URL 正确以 /dev 结尾,但是,当提交表单并使用 google.script.run 调用 Google Apps 脚本代码时,URL 似乎包含 @ 987654331@,因此 getEnv 的计算结果为 prod

要重现的示例代码

该应用发布为以我的身份执行并允许匿名访问,但是,当发布为以用户访问网络应用和/或限制对网络应用的访问时执行时,我看到相同的行为。

code.gs

function doGet(e) {
  var pageHtmlTemplate = HtmlService.createTemplateFromFile("default");
  pageHtmlTemplate.env = getEnv();
  return pageHtmlTemplate.evaluate();
}

function getEnv() {
  var devId = 'AKfycbwou0odFWX6II6YaeSaSOaXF4faYrzJ5XygssntdnI';
  var prodId = 'AKfycbxO20AYwEDPvdRsXu_K9pOb-E_iWRV12Wuv3TCApF53vDeuQpU';
  var currUrl = ScriptApp.getService().getUrl();
  var env = "unknown";
  if (currUrl.indexOf(devId) != -1) {
    env = "dev";
  } else if (currUrl.indexOf(prodId) != -1) {
    env = "prod";
  }
  
  return env + " (" + currUrl + ")";
}

default.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  </head>
  <body>
    <h1>Env on load</h1>
    <?= env ?>
    
    <h1>Env on callback</h1>
    <div id="test">
    </div>
  </body>
  <script>
      $(document).ready(function() {
          google.script.run.withSuccessHandler(success).getEnv();
      });

      function success(env) {
          $("#test").html(env);
      }
  </script>
</html>

测试网址

这两个都有 prod 脚本 id,但取决于它是以 /dev 还是 /exec 结尾,getUrl 的结果会发生变化。

【问题讨论】:

  • 似乎在提交表单并使用 google.script.run 调用 Google Apps 脚本代码时,URL 包含 /callback,因此 getEnv 的计算结果为 prod。 i> 你什么意思?你能专注于实际问题而不是改变的行为吗?
  • 问题是行为改变了。当调用 ScriptApp.getService().getUrl() 并且 URL 不包含 \dev 时,将返回生产 URL。所以当使用 dev URL 发生回调时,返回的环境是不正确的。
  • 我添加了代码来演示通过 google.script.run 进行回调时 getUrl 的行为
  • 您可以发布更新作为答案,因为它解决了您的问题。
  • @TheMaster "Update" 移至社区 wiki 答案。

标签: google-apps-script web-applications


【解决方案1】:

由 OP 作为"update" to the question 发布

更新

(2020 年 4 月 17 日)重新发布此脚本后,之前的(正确)行为返回。我只能猜测 Google 最近的一些更新解决了这个问题。

【讨论】:

    【解决方案2】:

    我也遇到过同样的问题,尝试通过菜单 Execute -> "Disable ...Chrome V8" 禁用 Chrome V8 应用脚本。

    【讨论】:

    • 感谢您的建议,但没有任何效果
    • 虽然禁用 Chrome V8 没有任何效果,但重新发布脚本实际上使其恢复到以前的(正确)行为。我只能猜测谷歌最近的一些更新解决了这个问题。
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    相关资源
    最近更新 更多