Задача вывести html код в Google таблице для проигрывания музыки, и чтобы через несколько секунд этот код закрывался. Пока сделал так:
Сам скрипт
function showDialog() {
var html = HtmlService.createHtmlOutputFromFile('Win')
.setWidth(4).setHeight(3);
SpreadsheetApp.getUi().showModalDialog(html, 'Победа');
}
Он открывает следующее модальное окно:
Win.html
<html>
<head>
<base target="_top">
</head>
<body>
<audio id="player" autoplay>
<source src="http://pesochnica.tk/cut.mp3" type="audio/mpeg">
Ваш браузер не поддерживает аудио элементы.
</audio>
<script type="text/javascript">
Utilities.sleep(5000);
google.script.host.close();
</script>
</body>
</html>
Суть в том, что не получается реализовать паузу. Если в коде оставляю только google.script.host.close();
, то окно отлично закрывается сразу после загрузки.
А при попытке добавить любой из следующих вариантов приводят к тому, что оконо просто остаётся висеть.
Utilities.sleep(5000);
Thread.sleep(5000);
TimeUnit.SECONDS.sleep(5);
Вот так должно получиться (приблизительно):
Code.gs
function doSomething()
{
Utilities.sleep(5000);
Logger.log('I was called!');
}
Win.html
<html><head><base target="_top"></head>
<body>
<audio id="player" autoplay>
<source src="http://pesochnica.tk/cut.mp3" type="audio/mpeg">
Ваш браузер не поддерживает аудио элементы.
</audio>
<script type="text/javascript">
window.onload = function()
{
google.script.run
.withSuccessHandler(closeDialog)
.doSomething()
};
window.closeDialog = function()
{
google.script.host.close();
};
</script>
</body></html>
Документация (на английском):
Class google.script.run. Client-side API
Если коротко, то
<script type="text/javascript">
window.onload = function() {
setTimeout(function() {
google.script.host.close();
}, 5000);
};
</script>
В общем случае, есть два варианта решения задачи: 1) установить колбэк, который сработает после вычислений на клиенте, 2) закрыть окно после рачетов на сервере.
Требует только код на клиенте. В примере используется setTimeout
window.onload = function() {
setTimeout(function() {
google.script.host.close();
}, 5000);
};
Требует код и на клиенте и на сервере. В примере используется Utilites.sleep()
для отложенного действия
function setServerTimeout(milliseconds){
Utilities.sleep(milliseconds);
}
window.onload = function() {
google.script.run
.withSuccessHandler(function() {
google.script.host.close();
})
.setServerTimeout(5000);
};
Листинг рабочей програмы с примером https://gist.github.com/oshliaer/10ea6ecf35f17f9340906714a9f7f714
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Ребят, кто может сказать почему модальное окно не открывается на мобильнике?
В коде определяю свой documentwrite = function(){мой код} Затем делаю ajax запрос, ответ на этот запрос - js, который выполняется через window
Определить, является ли массив отсортированным по возрастанию