Я начинающий/любительский javascript/программа для сценариев Google Apps, поэтому, пожалуйста, простите меня, если ответ будет очевиден. Кроме того, это может быть настолько очевидно, что я даже не знаю правильного поискового запроса, чтобы найти свой ответ. Если это так, я сожалею об этом.
Я пишу функцию Google Apps Script, которая идеально загружала бы ряд окон HtmlOutput с каждым последующим открытием окна после того, как пользователь закрыл предыдущий. Однако, когда я пытаюсь запустить его, скрипт загружает все окна в порядок, не дожидаясь закрытия пользователем предыдущего окна.
Я также прекрасно понимаю, что использовать функцию Utilities.sleep()
не рекомендуется. Однако, интересно, это единственный способ добиться этого в этом случае. Похоже, что будет более очевидный, лучший способ.
Как заставить программу ждать ответа пользователя перед загрузкой следующего окна?
Вот пример кода:
//THIS FUNCTION SETS UP THE HTMLOUTPUT
function setDialog(userText){
var displayHtml = HtmlService.createHtmlOutput(
'<!DOCTYPE html>'+
'<html>'+
'<head>'+
'<base target="_top">'+
'</head>'+
'<body>'+
'<h1>'+userText+'</h1>'+
'<input type="button" value="Close" '+
'onclick="google.script.host.close()" />'+
'</body>'+
'</html>');
SpreadsheetApp.getUi()
.showModalDialog(displayHtml, 'Here your HTML!');
}
//THIS FUNCTION DISPLAYS 4 DIALOGS BASED ON VARIABLES
function displayDialogs(){
var uOne = 'One';
var uTwo = 'Two';
var uThree = 'Three';
var uFour = 'Four';
setDialog(uOne);
setDialog(uTwo);
setDialog(uThree);
setDialog(uFour);
}
Поведение, которое я хочу выше, было бы следующим:
Вместо этого я получаю:
Заранее спасибо за помощь, и я сожалею, если это обман. Я искал ответ перед публикацией.
Следующая модификация вашего кода будет отображать последовательные диалоги один за другим, только когда предыдущий закрыт и остановится, когда больше не будет показано.
Глобальная переменная как объект JSON помогает контролировать поток. Кнопка "Закрыть" должна иметь в ней вызов функции google.script.run
перед закрытием диалогового окна для открытия следующего диалогового окна.
var GLOBAL_OBJECT_FOR_NEXT_DISPLAY = {//Use all caps for Global variables
"1":"Two",
"2":"Three",
"3":"Four"
}
//THIS FUNCTION SETS UP THE HTMLOUTPUT
function setDialog(userText, thisLoop){
var displayHtml = HtmlService.createHtmlOutput(
'<!DOCTYPE html>'+
'<html>'+
'<head>'+
'<base target="_top">'+
'</head>'+
'<body>'+
'<h1>'+userText+'</h1>'+
'<input type="button" value="Close" '+
'onclick="google.script.run.showNext(' + thisLoop + ');google.script.host.close(); " />'+
'</body>'+
'</html>');
SpreadsheetApp.getUi()
.showModalDialog(displayHtml, "Here your HTML!");
}
//THIS FUNCTION DISPLAYS 4 DIALOGS BASED ON VARIABLES
function displayDialogs(){
var uOne = 'One';
setDialog(uOne,1);
}
function showNext(count) {
var whatNext;
count = count.toString();
Logger.log('count: ' + count)
whatNext = GLOBAL_OBJECT_FOR_NEXT_DISPLAY[count];
Logger.log('whatNext: ' + whatNext)
if (!whatNext) {return;}//Stop if there is no next value found
setDialog(whatNext,Number(count) + 1);
}
google.script.run
но это лучше оставить для отдельного вопроса. Еще раз спасибо!