2015-01-27 84 views
2

我做了一个小型的网络应用程序,当用户点击电子表格中的链接时打开。该链接将把他们带到网络应用程序,这会更改电子表格。 我希望浏览器窗口在代码完成运行后自动关闭。运行Google脚本网络应用程序后关闭窗口?

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

// here I want browser window to close 

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

感谢您的帮助

回答

1

你不能得到窗口从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对话框作为内容,而你可以通过得到对话框自动关闭。它不会在另一个浏览器选项卡中打开,但可以自动关闭它。

2

我碰到你的问题就来了多久,你问后,但如果你或其他人正在寻找答案,试试这个:

得到浏览器窗口关闭,创建指示一个简单的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应用程序似乎关闭窗口只打开一个窗口,为用户提供一条消息 - 但我相信你的用例比这更复杂,而你和其他人可以智能地利用这个例子中的校长对你有利。

+0

你可能永远不会看到这个评论,但如果你这样做,我真的非常感谢你!你刚刚救了我工作。这很可能是整个网络上唯一真正解决这个问题的解决方案。我在这里经历了每一个问答! – 2018-03-02 12:42:52

相关问题