Вчера вечером я сделал быстрый всплеск, чтобы попытаться реализовать автозаполнение имени пользователя и пароля в моем приложении GXT. Под «автозаполнением» я подразумеваю не автозаполнение в стиле Ajax, а автозаполнение на основе браузера. Лучшая информация, которую я нашел об этом через Google, находится в следующем сообщении:
http://osdir.com/ml/GoogleWebToolkit/2009-04/msg01838.html
Я не использовал эту технику, потому что я использую GXT и не хотел терять внешний вид моей формы входа в систему.
Мне удалось заставить все работать в Firefox (он содержит и имя пользователя, и пароль). В IE он заполняет только имя пользователя, а не пароль. В Safari / Chrome он вообще не работает.
Вот как я это сделал:
- Создал скрытую форму HTML на моей странице HTML, которая встраивает GWT.
<form method="post" action="javascript:void(0)" style="display: none">
<input type="text" id="username" name="username" value=""/>
<input type="password" id="password" name="password" value=""/>
<input type="submit" value="Login" id="login"/>
</form>
- Когда пользователь нажимает кнопку «Войти» в моем приложении GWT, заполняет поля в этой скрытой форме и «нажимает» на кнопку входа (что ничего не будет делать, поскольку action = "javascript: void (0)" .
// Set the hidden fields to trigger the browser to remember
DOM.getElementById("username").setAttribute("value", username.getValue());
DOM.getElementById("password").setAttribute("value", password.getValue());
clickFormLogin();
...
public static native void clickFormLogin() /*-{
$doc.getElementById("login").click();
}-*/;
Это работает в Firefox 3.5 и предлагает мне сохранить пользователя / пароль в верхней части экрана. Мне кажется, я знаю, почему это не работает в Safari / Chrome, и это потому, что действие формы никуда не идет и форма не отправляется. Если я изменю действие на действительный URL-адрес и покажу форму, нажав на кнопку «Форма» формы, вы сохраните ее в этих браузерах.
После ввода этого вопроса в качестве вопроса я подумал, что это может стать хорошим постом в блоге. Поэтому я скопировал все и добавил немного в свой блог:
http://raibledesigns.com/rd/entry/browser_based_username_password_autocomplete
Резюме и вопрос
Хотя я рад, что он работает в Firefox, я разочарован отсутствием в IE автодополнения паролей. Больше всего я не могу не думать, что есть способ заставить эту работу работать в браузерах на основе WebKit.
Кто-нибудь знает, как реализовать кросс-браузерное автозаполнение имени пользователя и пароля в GWT (в частности, GXT)?