4

昨晚,我做了一个快速的尝试,尝试在我的 GXT 应用程序中实现用户名/密码自动完成。“自动完成”不是指 Ajax 风格的自动完成,而是基于浏览器的自动完成。我通过谷歌找到的最佳信息在以下帖子中:

http://osdir.com/ml/GoogleWebToolkit/2009-04/msg01838.html

我没有使用这种技术,因为我使用的是 GXT,并且不想丢失登录表单的外观。

我成功地让一切都在 Firefox 中工作(它填充了用户名和密码)。在 IE 中,它只填充用户名,而不是密码。在 Safari/Chrome 中,它根本不起作用。

我是这样做的:

  • 在嵌入 GWT 的 HTML 页面上创建了一个隐藏的 HTML 表单。
<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)" 不会执行任何操作。
// 设置隐藏字段触发浏览器记住
DOM.getElementById("username").setAttribute("value", username.getValue());
DOM.getElementById("password").setAttribute("value", password.getValue());
clickFormLogin();

...

public static native void clickFormLogin() /*-{
$doc.getElementById("登录").click();
}-*/;

这适用于 Firefox 3.5,并提示我在屏幕顶部保存用户/密码。我相信我知道为什么这在 Safari/Chrome 中不起作用,那是因为表单的操作不会去任何地方并且表单没有提交。如果我将操作更改为实际 URL 并显示表单,单击表单的登录按钮会将其保存在这些浏览器中。

在这里输入这个问题后,我开始认为这可能是一篇很好的博客文章。因此,我复制了所有内容并在我的博客中添加了一些内容:

http://raibledesigns.com/rd/entry/browser_based_username_password_autocomplete

总结和问题
虽然我很高兴它可以在 Firefox 中运行,但我对 IE 缺少密码自动完成功能感到失望。最重要的是,我不禁想到有一种方法可以在基于 WebKit 的浏览器中完成这项工作。

任何人都知道如何在 GWT(特别是 GXT)中实现跨浏览器用户名/密码自动完成?

4

2 回答 2

1
  1. 请改用持久性 Cookie。
  2. 如果用户选择,IE 确实会保存密码,但它的工作方式不同。您至少需要输入用户名,以便它会自动完成密码。
于 2009-08-15T23:36:44.170 回答
0

你需要一个普通的 html 提交按钮。我认为这将解决它。

http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/2b2ce0b6aaa82461

于 2009-10-22T03:04:53.303 回答