Страницы

Поиск по вопросам

воскресенье, 10 марта 2019 г.

javascript alert синхронность или задержка выполнения скрипта

Хочу перегрузить стандартное поведение alert. Делается это просто: function alert(_m){ //code // предположим здесь я рисую окошко из div элементов и одной кнопкой, просто дизайн меняю. } Вопрос в том, как мне задержать выполнение функции, пока мой пользователь не выполнит в моем окне нужные действия. Задержка не подходит, так как это самый худший вариант. Сам я полагаю, что есть определенный способ управления сценарием, и можно как то приостановить его, а потом с точки останова или другой точки продолжить. П.С.: firebug как то позволяет дебагить, значит существует механизм...


Ответ

Во-первых, Firebug - это все-таки не просто скрипт, а расширение, имеющее доступ к API платформы (например, Mozilla). Потому и остановы в указанных точках он делает с помощью движка. Во-вторых, у браузеров есть такое понятие как "UI thread" - это поток, разделяемый (в смысле "shared") UI-событиями на странице и пользовательским JS на этой же странице. Это разделение означает, что нельзя одновременно выполнять JS-код и выдавать пользователю отзывчивую страницу. Можно организовать нечто похожее и рабочее (так обычно и делают) с помощью setTimeout()/setInterval(), но по сути это лишь откладывание на потом - это не запуск отдельного потока в полном смысле этого слова, это, скорее, перенесение части кода в "будущее" все того же UI-потока. Из вышеприведенного можно сделать вывод, что на пользовательском JS создать блокирующую функцию, чтобы она работала в точности как alert(), нельзя. В конце концов, вам понадобится нечто вроде бесконечного цикла для проверки какого-нибудь условия, который займет всю работу UI-потока. При этом вам нельзя будет использовать setInterval(), так как тогда ваша alert() не будет блокирующей. Возможно, в мои размышления вкралась ошибка, буду рад любым возражениям.

Комментариев нет:

Отправить комментарий