Я нашел полное решение для этого вопроса. (Я проверял это в Chrome 27 и Firefox 21).
Необходимо знать две вещи:
- Триггер «Сохранить пароль» и
- Восстановить сохраненное имя пользователя / пароль
1. Триггер «Сохранить пароль»:
Для Firefox 21 , «Сохранить пароль» запускается, когда он обнаруживает, что существует форма, содержащая поле ввода текста и поле ввода пароля ввода. Так что нам просто нужно использовать
$('#loginButton').click(someFunctionForLogin);
$('#loginForm').submit(function(event){event.preventDefault();});
someFunctionForLogin()
выполняет вход в ajax и перезагружает / перенаправляет на страницу входа, в то время как event.preventDefault()
блокирует первоначальное перенаправление из-за отправки формы.
Если вы имеете дело только с Firefox, вышеуказанного решения достаточно, но оно не работает в Chrome 27. Затем вы спросите, как вызвать «Сохранить пароль» в Chrome 27.
Для Chrome 27 , «Сохранить пароль» срабатывает после оно перенаправляется на страницу, отправляя форму, содержащую поле ввода текста с атрибутом name = 'username' и полем ввода пароля с атрибутом name = 'password' . Поэтому мы не можем заблокировать перенаправление из-за отправки формы, но мы можем сделать перенаправление после того, как мы выполнили вход в ajax. (Если вы хотите, чтобы вход в ajax не перезагружал страницу или не перенаправлял на страницу, к сожалению, мое решение не работает.) Тогда мы можем использовать
<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>
Кнопка с type = 'button' сделает форму не подлежащей отправке при нажатии кнопки.
Затем, связывание функции с кнопкой для входа в AJAX. Наконец, вызов $('#loginForm').submit();
перенаправляет на страницу входа. Если страница входа в систему является текущей страницей, то вы можете заменить «SignIn.xxx» текущей страницей, чтобы выполнить «обновление».
Теперь вы обнаружите, что метод для Chrome 27 также работает в Firefox 21. Так что лучше его использовать.
2. Восстановите сохраненное имя пользователя / пароль:
Если у вас уже есть loginForm, жестко запрограммированный как HTML, у вас не возникнет проблем с восстановлением сохраненного пароля в loginForm.
Однако сохраненное имя пользователя / пароль не будет привязано к loginForm, если вы используете js / jquery для динамического создания loginForm, поскольку сохраненное имя пользователя / пароль привязывается только при загрузке документа.
Поэтому вам нужно было жестко закодировать loginForm как HTML и использовать js / jquery для динамического перемещения / показа / скрытия loginForm.
Примечание:
Если вы используете ajax, не добавляйте autocomplete='off'
в форме тега, например
<form id='loginForm' action='signedIn.xxx' autocomplete='off'>
autocomplete='off'
приведет к сбою восстановления имени пользователя / пароля в loginForm, поскольку вы не разрешаете ему «автозаполнение» имени пользователя / пароля.