gwt - smart - remove autocomplete input chrome
¿Permitir que el navegador guarde los valores de nombre de usuario/contraseña en un<formulario> de inicio de sesión? (3)
Tengo una aplicación GWT y necesito un formulario de inicio de sesión de usuario. Quiero permitir que el navegador guarde el nombre de usuario y la contraseña para el usuario. Creo que necesito usar un formulario ''regular'' para esto (no uno generado por GWT). Así que hice una forma simple:
<form id="myform">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="Login" />
</form>
Ahora me gustaría interrumpir el proceso de envío, tomar el nombre de usuario / contraseña, iniciar sesión a través de RPC, pero que el navegador guarde los contenidos de esos campos para el usuario, si así lo desean. Hay algunas publicaciones en los tableros de desarrollo de GWT, no estoy seguro de cuál funciona porque ninguno de ellos está funcionando de la caja para mí. Creo que debería verse así:
FormPanel form = FormPanel.wrap(Document.get().getElementById("myform"), false);
form.setAction("javascript:;");
form.addSubmitHandler(new SubmitHandler() {
public void onSubmit(SubmitEvent event) {
// Do my RPC call here?
// User should have been prompted to save password already now?
}
});
¿Alguien sabe cómo hacer que esto funcione?
Mientras buscaba lo mismo, me encontré con este párrafo en el wiki de google-web-toolkit-incubator:
autocompletar y GWT
Algunos navegadores ofrecen la opción de almacenar combinaciones de nombre de usuario / contraseña para que se rellenen automáticamente para el usuario la próxima vez que visiten la página. Sin embargo, generalmente esto solo funciona si hay dos cuadros de entrada (uno de tipo contraseña), y solo si esos cuadros de entrada se cargan junto con la página principal, y no se agregan más tarde a través de javascript (que es lo que hace GWT).
Para forzar que aparezcan estos cuadros de entrada, rellenelos en el HTML del proyecto en un div invisible. Luego, en GWT, en lugar de crear un TextBox y un PasswordTextBox, haz visible el div y lee los valores usando el DOM. biblioteca.
ver: http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ
Esto depende de cómo se vea su formulario ( myform
) porque cada navegador usa su propia heurística para descubrir un posible formulario de inicio de sesión con credenciales para almacenar (Chrome, por ejemplo, necesita un atributo de acción presente en el marcado http://code.google.com/p / chromium / issues / detail? id = 29513 ). Entonces, lo que hicimos fue google para recordar la función de credenciales para cada navegador que nuestra aplicación debe admitir. El resultado fue el siguiente elemento de formulario:
<form id="login-form" style="display:none" action="login">
<input type="text" tabindex="0" name="username" id="login-username">
<input type="password" tabindex="0" name="password" id="login-password">
<input style="position: absolute; left: -9999px; width: 1px; height: 1px;" type="submit">
</form>
Puede funcionar para ti también.
EDITAR
Aquí un ejemplo que me funciona (solo probé FF versión 14.x). No olvides quitar la display:none
de la etiqueta del formulario.
public class Starter implements EntryPoint {
private static final String FORM_ID = "login-form";
private static final String USER_ID = "login-username";
private static final String PASSWORD_ID = "login-password";
@Override
public void onModuleLoad() {
injectLoginFunction();
TextBox fUsername = TextBox.wrap(DOM.getElementById(USER_ID));
fUsername.setStyleName("gwt-TextBox");
PasswordTextBox fPassword = PasswordTextBox.wrap(DOM.getElementById(PASSWORD_ID));
fPassword.setStyleName("gwt-PasswordTextBox");
FormPanel fLoginForm = FormPanel.wrap(DOM.getElementById(FORM_ID), false);
fLoginForm.setAction("");
fLoginForm.addSubmitHandler(new SubmitHandler() {
@Override
public void onSubmit(SubmitEvent event) {
Window.alert("test");
}
});
fLoginForm.getElement().setAttribute("onsubmit", "login();return false;");
}
private static void doLogin() {
Window.alert("test");
}
private static native void injectLoginFunction() /*-{
$wnd.login = function() {
@test.client.Starter::doLogin()();
};
}-*/;
}
:) simplemente configure su tipo de botón de inicio de sesión para "enviar" y ponga sus entradas y botones en el panel de formulario.