在 运行 之后关闭 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>
我希望有一天这对某个地方的人有用:)
干杯:)
我制作了一个小型 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>
我希望有一天这对某个地方的人有用:) 干杯:)