Znalazłem kompletne rozwiązanie tego pytania. (Przetestowałem to w Chrome 27 i Firefox 21).
Należy wiedzieć dwie rzeczy:
- Wyzwalacz „Zapisz hasło” i
- Przywróć zapisaną nazwę użytkownika / hasło
1. Uruchom „Zapisz hasło”:
W przypadku przeglądarki Firefox 21 funkcja „Zapisz hasło” jest uruchamiana, gdy wykryje, że istnieje formularz zawierający pole wejściowe i pole hasła. Więc po prostu musimy użyć
$('#loginButton').click(someFunctionForLogin);
$('#loginForm').submit(function(event){event.preventDefault();});
someFunctionForLogin()
wykonuje logowanie AJAX i przeładowuje / przekierowuje do zalogowanej strony podczas event.preventDefault()
blokując oryginalne przekierowanie z powodu przesłania formularza.
Jeśli masz do czynienia tylko z Firefoksem, powyższe rozwiązanie jest wystarczające, ale nie działa w Chrome 27. Następnie zapytasz, jak uruchomić opcję „Zapisz hasło” w Chrome 27.
W przeglądarce Chrome 27 „Zapisz hasło” jest uruchamiane po przekierowaniu na stronę przez przesłanie formularza zawierającego pole tekstowe z nazwą atrybutu = „nazwa użytkownika” i pole hasła z nazwą atrybutu = „hasło” . Dlatego nie możemy zablokować przekierowania z powodu przesłania formularza, ale możemy wykonać przekierowanie po zalogowaniu się w AJAX. (Jeśli chcesz, aby login ajax nie przeładowywał strony lub nie przekierowywał do strony, niestety moje rozwiązanie nie działa.) Następnie możemy użyć
<form id='loginForm' action='signedIn.xxx' method='post'>
<input type='text' name='username'>
<input type='password' name='password'>
<button id='loginButton' type='button'>Login</button>
</form>
<script>
$('#loginButton').click(someFunctionForLogin);
function someFunctionForLogin(){
if(/*ajax login success*/) {
$('#loginForm').submit();
}
else {
//do something to show login fail(e.g. display fail messages)
}
}
</script>
Przycisk z type = 'button' spowoduje, że formularz nie zostanie wysłany po kliknięciu przycisku. Następnie przypisujemy funkcję do przycisku logowania Ajax. Wreszcie wywołanie $('#loginForm').submit();
przekierowuje do strony zalogowanej. Jeśli stroną, na której się zalogowano, jest bieżąca strona, możesz zastąpić „signedIn.xxx” bieżącą stroną, aby „odświeżyć”.
Teraz przekonasz się, że metoda dla przeglądarki Chrome 27 działa również w przeglądarce Firefox 21. Dlatego lepiej jej używać.
2. Przywróć zapisaną nazwę użytkownika / hasło:
Jeśli masz już loginForm zakodowany na stałe w formacie HTML, nie będzie problemu z przywróceniem zapisanego hasła w loginForm.
Jednak zapisana nazwa użytkownika / hasło nie zostanie powiązana z loginForm, jeśli użyjesz js / jquery do dynamicznego utworzenia formularza loginForm, ponieważ zapisana nazwa użytkownika / hasło jest wiążąca tylko podczas ładowania dokumentu.
Dlatego trzeba było na stałe zakodować loginForm jako HTML i użyć js / jquery, aby dynamicznie przenosić / pokazywać / ukrywać loginForm.
Uwaga:
Jeśli logujesz się do AJAX, nie dodawaj autocomplete='off'
tagów w postaci
<form id='loginForm' action='signedIn.xxx' autocomplete='off'>
autocomplete='off'
spowoduje, że przywrócenie nazwy użytkownika / hasła do formularza loginForm nie powiedzie się, ponieważ nie zezwalasz na to, że „automatycznie uzupełnia” nazwę użytkownika / hasło.