2015-01-27 184 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

相關問題