Google Apps脚本中ScriptApp.getService()。getUrl()的行为似乎已更改

摘要

一段时间以来,我一直在使用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栏中的地址以getUrl结尾,则

/dev总是返回dev URL,如果不是,则返回prod URL。由于URL正确地以/dev结尾,因此在首次显示网络表单时没有问题,但是,似乎在提交表单并使用google.script.run调用Google Apps脚本代码时,该网址包含/callback,因此getEnv的值为prod

要复制的示例代码

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

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>

测试URL
这两个都有prod脚本ID,但是/dev的结果会根据其以/execgetUrl结尾而变化。

dmkut 回答:Google Apps脚本中ScriptApp.getService()。getUrl()的行为似乎已更改

由OP发布为"update" to the question

更新

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

,

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

本文链接:https://www.f2er.com/3107386.html

大家都在问