2013-06-05 4 views
8

Я пытаюсь переопределить стандартный метод confirm() в Javascript (сделайте приятный интерфейс и прочее). Я прочитал 100 сообщений о том, что это «невозможно сделать», но я не хочу сдаваться, пока не дал ему справедливый снимок. :)Какие методы блокируются в Javascript?

Итак, реальная проблема заключается в том, что метод confirm() должен блокировать все выполнение javascript до тех пор, пока пользователь не выберет опцию. Итак, каковы методы в Javascript, которые блокируют поведение? Я был в состоянии придумать 5:

  • alert() - меня не устраивает, поскольку он отображает нежелательную интерфейс своей собственной;
  • confirm() - та же проблема, что и alert();
  • бесконечная петля - даже современные браузеры будут убирать процессор, как сумасшедший, и отображать «стоп-javascript»? через несколько секунд;
  • XmlHttpRequest в синхронном режиме - своего рода, но она включает в себя сервер ...
  • showModalDialog() - хороший, но мне нужен специфический дизайн, плюс есть некоторые требования совместимости браузера ...

Лучший Мне до сих пор нужно создать с приглашением (которое затем получает собственный поток выполнения javascript) и блокировать с XmlHttpRequest, пока пользователь не выбрал опцию в . К сожалению, это связано с передачей результата вперед и назад между сервером, и я бы хотел сделать эту клиентскую часть на 100%. Кроме того, он связывает поток сервера при открытии диалога, и могут быть некоторые зависящие от браузера аякс-тайм-ауты, которые применяются.

Может ли кто-нибудь подумать о любых других методах Javascript, которые блокируют выполнение, которое может быть (ab) использовано для достижения желаемого эффекта?

+5

Проблема на самом деле не блокируется, поскольку это можно сделать с помощью цикла while или чего-то подобного, но как вы собираетесь создавать диалог, который требует javascript, когда пользователь отвечает, но в то же время блокирует выполнение javascript ,Лучшим подходом было бы создание обратного вызова в вашем настраиваемом диалоговом окне, а затем выполнение остальной части кода в обратном вызове вместо того, чтобы полагаться на блокировку. – adeneo

+0

Просто переключитесь с линейного кода на html popup и callback design, просто, сделал это несколько раз. – yent

+0

@adeneo - да, это будет * наилучшим образом, если бы не было кучи кода, который теперь должен быть преобразован, включая стороннюю библиотеку. Что касается блокировки, но не-блокировки - это в любом случае разрешено '