Эмуляция Javascript 'alert' блокирующий характер

Возможно ли создать специальное модальное сообщение, которое "блокирует" выполнение script до ввода пользователя?

Например, как вы можете добиться этого, не используя функции оповещения/приглашения для собственного окна?

setInterval(function(){ 
     alert('Click OK to Continue');  // timing stops until user hits ok
},4000);

Я знаю, что у вас может быть ваш пользовательский диалог, вызывающий функцию обратного вызова при вводе пользователя, но я заинтересован в возможности заставить это поведение блокировки

Ответы

Ответ 1

Возможно ли создать специальное модальное сообщение, которое "блокирует" выполнение script до ввода пользователя?

Нет. Невозможно блокировать выполнение или взаимодействие с пользователем так же эффективно, как собственное всплывающее окно (поскольку с помощью пользовательских всплывающих окон пользователь всегда технически способен использовать инструменты разработчика, чтобы выйти из него).

Однако, как говорит pst в комментариях к вопросу, асинхронные лайтбоксы не являются обременительными и почти так же эффективны при блокировке взаимодействия с пользователем, как всплывающие окна, поэтому я рекомендую найти библиотеку, которая предоставляет лайтбоксы, которые вам нравятся, и работать с ними.

Например, как вы можете добиться этого, не используя функции оповещения/приглашения для собственного окна?

Вы не можете использовать этот код, чтобы делать то, что вы говорите, даже с помощью встроенных функций оповещения/приглашения на окно (см. эта скрипка - wait 4 секунды до закрытия всплывающего окна). Вам понадобится следующее:

function timeoutFunction() {
    alert('Click OK to Continue');  // timing ACTUALLY stops until user hits ok
    setTimeout(timeoutFunction, 4000);
}
setTimeout(timeoutFunction,4000);

Что вы не можете реализовать (точно - см. выше в лайтбоксах) без собственных всплывающих окон.

Даже циклы while(true) обычно не блокируются, а всплывающее окно - firefox по крайней мере имеет сообщение "stop script", которое появляется после того, как оно слишком длинное, и я уверен, что другие основные браузеры тоже.

Ответ 2

Нет, вы не можете (по крайней мере, не в браузере). API Javascript в основном асинхронный. alert/prompt являются исключениями. Однако работать с асинхронными запросами и обратными вызовами не очень сложно.

Ответ 3

Немного устарел, но в случае, если это поможет, я нашел свое решение с этим:

var answer = confirm("are you sure?"); if(!answer)return;