ScriptApp.getService().getUrl() 损坏了?

问题描述 投票:0回答:2

为什么 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 页面

google-apps-script geturl
2个回答
1
投票

我也有同样的问题。 如果我在开发模式下工作,即 URL 以 /dev 结尾,则 ScriptApp.getService().getUrl() 返回错误的 URL。 但是,如果您部署并使用以 /exec 结尾的已发布版本链接,它将起作用。 我相信这是一个错误。 正如这篇文章所建议的 ScriptApp.getService().getUrl() 指向开发 URL。我怎样才能让它指向执行生产 URL?,我已禁用 Chrome V8 在常规设置中运行,它可以工作。


0
投票

我想再次提出这个问题,因为,IMO,ScriptApp.getService().getUrl() 的行为仍然如此,因此它变得毫无用处,并导致尝试使用它的开发人员浪费时间。

要重现,请执行以下操作。

  1. 创建一个空白电子表格并编辑脚本(扩展>应用程序脚本)。
  2. 粘贴以下代码:
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());
}
  1. 从代码编辑器执行
    myFunction()
    。输出应如下所示:
1gG__HE81QjvNBH6OvuyRdZO0qiJkbXM0ljwsJqXv0F6DYB9aVhp82F64
null
  1. 首次部署脚本(部署 > WebApp 类型的新部署)。我选择“组织内的任何人”作为“谁有权访问”,但我不确定它是否起作用。以下是我可以从部署对话框复制的 URL:
    https://script.google.com/a/macros/ballat.be/s/AKfycbx62F71bp90wWlSTFPook8iPfupdaJYuigfk7td0Wes9yo5kAokEBelbFR-L3QOJ2tY/exec
  2. 从编辑器中再次运行
    myFunction()
    。这是输出:
1gG__HE81QjvNBH6OvuyRdZO0qiJkbXM0ljwsJqXv0F6DYB9aVhp82F64
https://script.google.com/a/ballat.be/macros/s/AKfycbxgbI9m7FDX8vOFtJ3_NIAETGsfEzkEXZJ83bkYRjI/dev
  1. 定义每分钟运行
    myFunction()
    的时间驱动触发器。这是输出:
  • 对于头部版本:
1gG__HE81QjvNBH6OvuyRdZO0qiJkbXM0ljwsJqXv0F6DYB9aVhp82F64
https://script.google.com/a/ballat.be/macros/s/AKfycbx13dkx_Jd7f81iDhhToK5QBlz3zjCwcgPJNLINTTT3GrMbayk/exec
  • 对于已部署的版本(版本 1)
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 混乱变得更糟之前摆脱这种混乱。

© www.soinside.com 2019 - 2024. All rights reserved.