Używam JQuery do przechwytywania zdarzenia zwolnienia, gdy użytkownik nawiguje z dala od strony. Działa to dobrze, ale mam dane, które należy zapisać tylko w przypadku, gdy użytkownik chce odejść.Uruchamiaj kod JavaScript tylko, jeśli funkcja 'beforeunload' zwraca true
Oto mój catch-22. Jeśli zapisuję kod zbyt wcześnie, a użytkownik nie chce odejść, zepsułem stan usługi internetowej wspierającej kod.
W związku z tym muszę wykonać prawie niemożliwe do pokonania zadanie wykonywania kodu tylko wtedy, gdy okno dialogowe "beforeunload" zwraca wartość true.
$(window).on('beforeunload', function(e) {
var info = * some info to save the current page state *
return 'Are you sure you want to navigate away from the Test Runner?';
//unreachable place where I wish I could ajax 'info' back to safety
});
Ten kod jak to pojawi się okno dialogowe z pytaniem „Czy na pewno chcesz nawigować od androidów test?” a jeśli użytkownik kliknie przycisk Anuluj, uniemożliwi użytkownikowi opuszczenie strony.
Oto kolejna myśl:
$(window).on('onunload', function(e) {
var info = * some info to save the current page state *
var r=confirm('Are you sure you want to stop the Test Runner?');
if(r==true)
{
//place where I wish I could ajax 'info' back to safety
return 'leaving'
}
else
return 'leaving unsaved';
});
Ta druga metoda nie uniemożliwić użytkownikowi pozostawienie obu kierunkach, ale w jednym przypadku będzie wykonywał najpierw niektóre zapisać kod, a drugi uruchamia je z powrotem do zimno. Problem z tym podejściem polega na tym, że większość przeglądarek (słusznie) uniemożliwia uruchamianie skrzynek potwierdzających w stanie window.onunload, dzięki wieloletnim programistom sieci z lat 90. niewidomym dla biednych internautów.
Zastrzeżenie:jestem w pełni świadoma, że w społeczności internetowej dewelopera mocno zniechęcić uniemożliwiając użytkownikowi pozostawiając stronę i wykonywania kodu w tle, jak starają się to zrobić. Kiedy widzę pytania takie jak: "Jak uniemożliwić użytkownikowi opuszczenie mojej naprawdę niesamowitej strony internetowej" , moja reakcja odruchowo jest "nie rób tego!" To powiedziało, że jest inaczej. Jest to wyspecjalizowana strona dla konkretnego klienta i potrzebujemy tego jako środka zapobiegającego paniki. Jestem jednym z dobrych chłopaków, obiecuję. Jestem Tobą.
Co o zapisaniu danych okresowo małe pęknięcia/tło? W ten sposób wystarczy wywołać funkcję save() w powyższym module obsługi zdarzeń. Podobny do sposobu, w jaki gmail zapisuje tymczasowo wiadomości e-mail w folderze wersji roboczej podczas pisania .. – Amitd
Plus jeden dla dobrego pomysłu, ale niestety nie opcja w tym przypadku: – darkpbj