ScriptApp.getService().getUrl() 的行为似乎已经改变

Dus*_*uck 5 web-applications google-apps-script

概括

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

以前的行为

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

当前行为

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

要重现的示例代码

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

代码.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 + ")";
}
Run Code Online (Sandbox Code Playgroud)

默认.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>
Run Code Online (Sandbox Code Playgroud)

测试网址

这两个都有 prod 脚本 id,但取决于它是否以/dev或结尾/execgetUrl更改的结果。

小智 -1

我也遇到过同样的问题,尝试通过菜单“执行”->“禁用...Chrome V8”来禁用 Chrome V8 应用程序脚本。