在 运行 之后关闭 window Google 脚本网络应用程序?

Closing window after running a Google Script web app?

我制作了一个小型 Web 应用程序,当用户单击电子表格中的 link 时,它会打开。 link 会将他们带到网络应用程序,该应用程序会对电子表格进行更改。 我希望浏览器 window 在代码完成后自动关闭 运行.

function doGet(e){
  // code make changes to spreadsheet

 // here I want browser window to close

  return HtmlService.createHtmlOutput(uniqueid + " is marked complete");
}; 

感谢帮助

需要区分 浏览器选项卡 中的 Web 应用程序和 侧边栏 对话框 Google 文档(Sheet、表格、文档)内的框。

问题是关于浏览器选项卡中的 Web 应用程序。如果要关闭边栏或对话框,只需使用:

google.script.host.close()

但是这个问题是针对网络应用程序的。您可以尝试在 HTML 中放置一个脚本标记,其中包含在 window 打开时自动 运行 的代码。

<script>
  window.top.close();
</script>

如果你想要延迟:

<script>
  setTimeout(function(){ window.top.close(); }, 3000);
</script>

您可以尝试使用 window.onload

<script>
  window.onload=function(){
    console.log("This onload did run");
    setTimeout(function(){ window.top.close(); }, 3000);
  };
</script>

如果您不关心用户是否看到任何内容,您可以 运行 Apps 脚本内容服务。

我在你提出问题很久之后才看到你的问题,但如果你或其他人正在寻找答案,试试这个:

要让浏览器 window 关闭,请创建一个简单的 HTML 文件,该文件指示自己使用指令 window.top.close() 关闭,如下所示:

关闭Window.html

<!DOCTYPE html>
<html>
    <script>
        window.top.close();
    </script>
</html>

您需要 return 作为 HTML 输出,以便当 Web 应用程序 运行s 时,它 运行s 在客户端(如 Sandy 所说在之前的回答中)。在您的场景中,您已经 returning 一个 HTML 输出以通知某些“[uniqueid] 已标记为完整”,并且假定您不希望关闭此 window 在脚本 运行s 之后,否则用户将不会收到您想要的提示。这就是为什么您需要将指令 window.top.close() 保留在发出此警报的同一 HTML 输出之外。为此,只需将两个 HTML 输出以逗号分隔为两个 return 值。

这是我为您的用例模拟解决方案而提出的另外两个文件。仅供参考:我将面向用户的 HTML 打包在一封电子邮件中以提供一个方便的执行点,并且代码将请求一个电子邮件地址进行传递。

Code.gs

function doGet(e){
  // code make changes to spreadsheet
  var ss = SpreadsheetApp.openById([The key for the spreadsheet you wish you modify])
  var sheet = ss.getActiveSheet()
  var lastRow = sheet.getLastRow()
  var params = JSON.stringify(e);
  var paramsArray = JSON.parse(params)
  sheet.getRange(lastRow + 1, 1).setValue('Code made changes to spreadsheet at ' + Date())
  sheet.getRange(lastRow + 1, 2).setValue(paramsArray.parameter.change)

  // here I want browser window to close
  var uniqueid = "Someuniqueid"
  return HtmlService.createHtmlOutputFromFile('Close Window'), HtmlService.createHtmlOutput(uniqueid + " is marked complete")
};

function mailIt() {
var emailAddress = Browser.inputBox('What email address do you want to send the WebApp to?')
var html = HtmlService.createTemplateFromFile('HTML Email to run Web App')
var htmlCode = html.getRawContent()
Logger.log(htmlCode)
  MailApp.sendEmail({
    name: "Publish WebApp for survey embed Test",
    to: emailAddress,
    subject: "Publish WebApp for survey embed Test",
    htmlBody:  htmlCode
  })
}

HTML 发送电子邮件至 运行 Web 应用程序

<!DOCTYPE html>
<html>
  <form action=[Your current Web App URL in quotes]>
  Send text to spreadsheet: <input type="text" name="change"><br>
  <input type="submit" value="Submit">
  </form>
</html>

显然,还有一些未解决的问题——比如为什么要求自动关闭 window 而您的 Web 应用程序似乎只打开一个 window,它为用户传递一条消息--但我相信您的用例比这更复杂,您和其他人可以巧妙地利用此示例中的原则来发挥您的优势。

在 HTML 文件的脚本部分末尾使用以下命令关闭 Google 表格中当前打开的 HTML window:

google.script.host.close();

而不是在你的 doGet(e) 函数的 return 语句中使用两个用逗号分隔的 HtmlServices(这对我不起作用 - 我只有一个 return 值)

你可以输入 window.top.close();在您的提交按钮的 onClick 事件中,如下所示:

替换:

<input type="submit" value="Submit">

与:

<input type="submit" 
        onclick="this.value='Magic ...'; 
        google.script.run.withSuccessHandler(closeWindow); ">

并在您的 html 中添加:

<script>
   function closeWindow() { window.top.close(); }
</script> 

我希望有一天这对某个地方的人有用:) 干杯:)