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, coalert()
;- 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?
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
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
@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 "