昨夜、GXT アプリケーションにユーザー名とパスワードのオートコンプリートを実装しようと、簡単なスパイクを実行しました。「オートコンプリート」とは、Ajax スタイルのオートコンプリートではなく、ブラウザー ベースのオートコンプリートを意味します。Google 経由でこれについて見つけた最良の情報は、次の投稿にあります。
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"/> </フォーム>
- ユーザーが GWT アプリケーションの「ログイン」ボタンをクリックすると、この非表示のフォームのフィールドにデータが入力され、ログイン ボタンが「クリック」されます (action="javascript:void(0)" であるため、これは何もしません)。
// 非表示フィールドを設定して、ブラウザが記憶するようにトリガーします DOM.getElementById("ユーザー名").setAttribute("値", ユーザー名.getValue()); DOM.getElementById("パスワード").setAttribute("値", 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) でクロスブラウザのユーザー名/パスワードのオートコンプリートを実装する方法を知っている人はいますか?