Summary
我一直在使用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 栏中的地址以以下结尾,则始终返回开发 URL/dev
或产品 URL(如果没有)。第一次显示 Web 表单时这不是问题,因为 URL 正确地以以下结尾/dev
,但是,似乎当提交表单并使用以下命令调用 Google Apps 脚本代码时google.script.run
,网址包含/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 + ")";
}
默认.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
or /exec
, 结果getUrl
change.
- https://script.google.com/a/dustinluck.com/macros/s/AKfycbxO20AYwEDPvdRsXu_K9pOb-E_iWRV12Wuv3TCApF53vDeuQpU/dev
- https://script.google.com/a/dustinluck.com/macros/s/AKfycbxO20AYwEDPvdRsXu_K9pOb-E_iWRV12Wuv3TCApF53vDeuQpU/exec
OP 发布为“更新”问题
Update
(2020 年 4 月 17 日)重新发布此脚本后,恢复了之前的(正确的)行为。我只能猜测谷歌最近的一些更新解决了这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)