Вы можете создать собственное синхронное оповещение/приглашение с функцией, ожидающей обещания jQuery до завершения, а затем, когда пользователь нажимает кнопку «ОК», обещает. Затем, когда вы заменяете свое «предупреждение» на «myCustomAlert», вы должны объявить функцию, которую она вызвала как «асинхронная функция», а затем «дождаться» перед вызовом.
Это может показаться сложным, но если вы играете с ним в JSFiddle, это довольно просто.
Я нашел это полезным, если вы переносите приложение, где вы не можете легко разбить функцию на разные разделы. Для этого требуется библиотека jQuery.
Вот мой пример https://jsfiddle.net/littlej247/g4k2h56c/5/
//*****HTML*********
<button type="button" id="alertMe">Alert ME!</button>
<div id="backgroudDiv"> <!-- This is optional but I like to grey out the background -->
<div id="alertDiv">
<b><span id="alertTitle"></span></b>
<br />
<span id="alertText"></span>
<hr>
<button type="button" id="alertDone">OK</button>
</div>
</div>
//Remember JS can't run in HTML files on chrome apps so functions are called by DOM
document.getElementById("alertMe").onclick = async function() {
console.log("Starting function \n Processing a bunch of stuff, calculating variable(s)....");
await myCustomAlert("Alert Title Here","Message");
console.log("Continue processing stuff with the variable(s) after the alert is clicked.... \n function finished");
};
//*****JavaScript*********
//Alerts can not be used in chrome apps, myCustomAlert function is a replacement.
var alertPromise
function myCustomAlert(messageTitle,messageBody){
console.log("myCustomAlert has been called");
alertPromise = $.Deferred();
document.getElementById("alertTitle").textContent=messageTitle;
document.getElementById("alertText").textContent=messageBody;
document.getElementById('backgroudDiv').style.display='block';
return $.when(alertPromise).done();
}
document.getElementById("alertDone").onclick = function() {
console.log("Finally, User clicked Done, \n now we can get back to work..");
document.getElementById('backgroudDiv').style.display='none';
alertPromise.resolve();
return(false);
};
//*****Styles*********
#alertDiv {
width: 400px;
padding: 15px;
margin: 100px auto auto auto;
z-index: 10000;
background-color: lightblue;
border-style: solid;
border-color: black;
}
#backgroudDiv {
display: none;
position: fixed;
z-index: 9000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.4);
}
возможно дубликат [оповещения не работает в пакетных приложениях] (http://stackoverflow.com/questions/13798706/alert-doesnt-work-in-packaged -apps) – MattSizzle
Определенный дубликат, но ответ на этот пост лучше ИМО. –