2013-06-05 13 views
8

Próbuję zastąpić standardową metodę confirm() w JavaScript (zrobić ładny interfejs i rzeczy). Czytałem 100 postów, że "nie da się tego zrobić", ale nie chcę się poddawać, dopóki nie zrobię tego rzetelnie. :)Jakie metody są blokowane w JavaScript?

Prawdziwy problem polega na tym, że metoda confirm() musi blokować wykonywanie wszystkich javascript dopóki użytkownik nie wybierze opcji. Więc jakie są metody w JavaScript, które mają działanie blokujące? Byłem w stanie wymyślić 5:

  • alert() - mi nie odpowiadał, ponieważ wyświetla niechciane UI własnych;
  • confirm() - ten sam problem, co alert();
  • nieskończona pętla - nawet nowoczesne przeglądarki pozbędą się CPU tak szalonego i wyświetlają "stop javascript?" monit po kilku sekundach;
  • XmlHttpRequest w trybie synchronicznym - rodzaj, ale to wymaga serwer ...
  • showModalDialog() - ładne, ale muszę specyficzną konstrukcję, a także istnieją pewne wymagania zgodności przeglądarki ...

Najlepszym podejście Do tej pory jest tworzenie z monitem (który następnie otrzymuje własny wątek wykonywania javascript) i blokowanie z XmlHttpRequest, dopóki użytkownik nie zaznaczy opcji w . Niestety wiąże się to z przekazaniem wyniku pomiędzy serwerem, i chciałbym uczynić to w 100% po stronie klienta. Ponadto przywiązuje wątek serwera podczas otwierania okna dialogowego i mogą obowiązywać określone czasy oczekiwania dla ajaxowych specyficznych dla przeglądarki.

Czy ktoś może myśleć o innych metodach JavaScript blokujących wykonanie, które mogą być (ab) użyte w celu uzyskania pożądanego efektu?

+5

Problem tak naprawdę nie jest blokowany, ponieważ można to zrobić za pomocą pętli while lub czegoś podobnego, ale w jaki sposób zamierzasz utworzyć okno dialogowe wymagające javascript, gdy użytkownik zareaguje, ale jednocześnie blokuje wykonywanie javascript .Lepszym rozwiązaniem byłoby wbudowanie wywołania zwrotnego w niestandardowym oknie dialogowym, a następnie wykonanie reszty kodu w wywołaniu zwrotnym zamiast polegania na blokowaniu. – adeneo

+0

Wystarczy przełączyć się z projektowania kodu liniowego do wyskakującego okienka HTML i wywołania zwrotnego, proste, zrobiłem to już kilka razy. – yent

+0

@adeneo - tak, że * będzie * najlepszym sposobem, jeśli nie było już stosu kodu, który musi teraz zostać przekonwertowany, w tym biblioteki innej firmy. Jeśli chodzi o blokowanie, ale nie blokowanie, to rozwiązane przez "