Вчера вечером я сделал быстрый всплеск, чтобы попытаться реализовать автозаполнение имени пользователя и пароля в моем приложении 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)?