为什么 ScriptApp.getService().getUrl() 返回另一个 URL,而 Web 应用程序位于另一个 URL 上? 部署网络应用程序后,指向它的链接是“https://script.google.com/macros/s/AKfycbyLfBVBICZES9w7N5sYzBYHv8oujoNG1FPnmYxGckZHNWSJh-nDWoFaWw5oZs7Cz3M6QA/exec”,但在logger.log上,当我检查 getUrl() 时,它是“https:/ /script.google.com/macros/s/AKfycbwFNB8lsKqyaECOo5Nzdj7SmYB26uXarHZD9WSYTLzmxIDLsoEN/exec"
我在此网络应用程序中有一个简单的功能要测试:
function myFunction() {
var url = ScriptApp.getService().getUrl();
Logger.log(url)
}
当我尝试该链接时,它显示“抱歉,此时无法打开文件。
请检查地址并重试。”
发生了什么事?
*编辑:有人可以向我强调一下,当 ScriptApp.getService().getUrl() 没有执行其预期功能时,它的目的是什么?
我正在尝试做的事情: 我的网络应用程序中不能有超过 1 个 html 页面,或者具体来说,我无法链接到网络应用程序中的另一个 html 页面
我也有同样的问题。 如果我在开发模式下工作,即 URL 以 /dev 结尾,则 ScriptApp.getService().getUrl() 返回错误的 URL。 但是,如果您部署并使用以 /exec 结尾的已发布版本链接,它将起作用。 我相信这是一个错误。 正如这篇文章所建议的 ScriptApp.getService().getUrl() 指向开发 URL。我怎样才能让它指向执行生产 URL?,我已禁用 Chrome V8 在常规设置中运行,它可以工作。
我想再次提出这个问题,因为,IMO,ScriptApp.getService().getUrl() 的行为仍然如此,因此它变得毫无用处,并导致尝试使用它的开发人员浪费时间。
要重现,请执行以下操作。
function doGet(e) {
lParameters = e.parameter;
if (e.parameter.target == undefined) {
textOutput = ContentService.createTextOutput("Welcome to the web app.");
return textOutput;
}
}
function myFunction() {
Logger.log(ScriptApp.getScriptId());
Logger.log(ScriptApp.getService().getUrl());
}
myFunction()
。输出应如下所示:1gG__HE81QjvNBH6OvuyRdZO0qiJkbXM0ljwsJqXv0F6DYB9aVhp82F64
null
https://script.google.com/a/macros/ballat.be/s/AKfycbx62F71bp90wWlSTFPook8iPfupdaJYuigfk7td0Wes9yo5kAokEBelbFR-L3QOJ2tY/exec
。myFunction()
。这是输出:1gG__HE81QjvNBH6OvuyRdZO0qiJkbXM0ljwsJqXv0F6DYB9aVhp82F64
https://script.google.com/a/ballat.be/macros/s/AKfycbxgbI9m7FDX8vOFtJ3_NIAETGsfEzkEXZJ83bkYRjI/dev
myFunction()
的时间驱动触发器。这是输出:1gG__HE81QjvNBH6OvuyRdZO0qiJkbXM0ljwsJqXv0F6DYB9aVhp82F64
https://script.google.com/a/ballat.be/macros/s/AKfycbx13dkx_Jd7f81iDhhToK5QBlz3zjCwcgPJNLINTTT3GrMbayk/exec
1gG__HE81QjvNBH6OvuyRdZO0qiJkbXM0ljwsJqXv0F6DYB9aVhp82F64
https://script.google.com/a/ballat.be/macros/s/AKfycbx62F71bp90wWlSTFPook8iPfupdaJYuigfk7td0Wes9yo5kAokEBelbFR-L3QOJ2tY/exec
现在让我们比较一下它们(为了便于阅读,我删除了 URL 的第一部分):
代码编辑器AKfycbxgbI9m7FDX8vOFtJ3_NIAETGsfEzkEXZJ83bkYRjI/dev
扳机头 AKfycbx13dkx_Jd7f81iDhhToK5QBlz3zjCwcgPJNLINTTT3GrMbayk/exec
触发器 v1 AKfycbx62F71bp90wWlSTFPook8iPfupdaJYuigfk7td0Wes9yo5kAokEBelbFR-L3QOJ2tY/exec
第一个 URL(从代码编辑器运行时)输出“欢迎使用 Web 应用程序。”或者如果代码已更新,则输出更新的文本。
第二个网址根本不起作用。
最后一个 URL 始终输出“欢迎使用网络应用程序。”。
当然,我已经尝试了好几天让我的应用程序使用第二个 URL。真是浪费时间。我希望我的答案可以为其他人节省时间,并激励他们在 Google Workspace-G-Cloud 混乱变得更糟之前摆脱这种混乱。