运行Google脚本网络应用程序后关闭窗口?
我做了一个小型的网络应用程序,当用户点击电子表格中的链接时打开。该链接将把他们带到网络应用程序,这会更改电子表格。 我希望浏览器窗口在代码完成运行后自动关闭。运行Google脚本网络应用程序后关闭窗口?
function doGet(e){
// code make changes to spreadsheet
// here I want browser window to close
return HtmlService.createHtmlOutput(uniqueid + " is marked complete");
};
感谢您的帮助
你不能得到窗口从Google Apps脚本代码关闭。 Apps脚本正在Google服务器上运行,JavaScript在此时无法访问浏览器。您可以将JavaScript放入HTML中,该HTML将在客户端运行(在用户浏览器中,在他们的计算机上),但是我无法获得任何东西来使窗口关闭。
我试着把脚本标签放在HTML中,并打开窗口时自动运行代码。
<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脚本内容服务。
你可以使用一个HTML对话框作为内容,而你可以通过得到对话框自动关闭。它不会在另一个浏览器选项卡中打开,但可以自动关闭它。
我碰到你的问题就来了多久,你问后,但如果你或其他人正在寻找答案,试试这个:
得到浏览器窗口关闭,创建指示一个简单的HTML文件本身关闭与指令window.top.close()
这样的:
关闭Window.html
<!DOCTYPE html>
<html>
<script>
window.top.close();
</script>
</html>
您需要返回以此为HTML输出,从而当Web应用程序运行s,它运行在客户端(正如Sandy在前面的回答中所述)。在你的场景中,你已经返回一个HTML输出来通知某些“[uniqueid]被标记为完整”,并且假定你不希望在脚本运行后关闭这个窗口,否则用户将不会收到提示你的意图。这就是为什么您需要保持指令window.top.close()
超出提供此警报的相同HTML输出的原因。为了实现这一点,只需逗号分隔两个HTML输出作为两个返回值。
下面是我提出的两个其他文件,用于为您的用例建模一个解决方案。仅供参考:我将面向用户的HTML打包成电子邮件,以提供方便的执行点,代码将请求发送电子邮件地址。
代码。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>
显然,有一些悬而未决的问题 - 就像它为什么要求自动而你的Web应用程序似乎关闭窗口只打开一个窗口,为用户提供一条消息 - 但我相信你的用例比这更复杂,而你和其他人可以智能地利用这个例子中的校长对你有利。
你可能永远不会看到这个评论,但如果你这样做,我真的非常感谢你!你刚刚救了我工作。这很可能是整个网络上唯一真正解决这个问题的解决方案。我在这里经历了每一个问答! – 2018-03-02 12:42:52