0

Chromeは、パスワードの保存を求めるプロンプトが表示されるタイミングに関して一貫していないようです。私のWebサイトから次の2つのプロセスを検討してください...

  1. ホームページへ

  2. [ログイン]をクリックします(これにより、Login.phpに移動します)

  3. ログイン/パスワードを入力してください

  4. 今ログインしていますが、Chromeからパスワードの保存を求められませんでした

でも...

  1. ホームページへ

  2. ログインをクリックします

  3. ページを更新

  4. ログイン/パスワードを入力してください

  5. これでログインしましたが、Chromeパスワードを保存するように求めました...

何が得られますか?唯一の違いは、「更新」を押すことです。Login.phpのコードは非常に単純です...基本的に:

<form id="LoginForm1" action="Login.php" method="POST">
  <input type="text" name="UserName" />
  <input type="password" name="Password" />
  <input type="submit" value="Login" />
</form>

メインページにはjavascript(jquery-1.7.2およびjquery.mobile-1.3.0)がありますが、Login.phpにはありません。ただし、Login.phpのフォームのスタイルは、更新されるまでjquerymobileのように見えるため、引き継がれているようです。誰かがこの振る舞いを説明できますか?(さらに、jquery / jquerymobileがパスワードの保存機能を禁止するのはなぜですか?)

よろしくお願いします...これが私の最初の質問です。

4

1 に答える 1

2

短い答え

私のホームページからLogin.phpへのリンクには、ahrefタグにdata -ajax="false"が必要でした。

jquery-mobileをLogin.phpに再インクルードした後、Login.phpのフォームタグにもdata-ajax="false"が必要でした。

 

長い答え

パート1

さらに掘り下げてみると、jquery-mobileの通常の動作は、すべてのhrefリンクを「ハイジャック」し、ajax機能を介してそれらを処理することであることがわかりました。これは、標準のahref転送ではなく、ajaxスタイルの転送としてLogin.phpに転送されていたことを意味します。標準の転送では、Login.phpで特別に宣言されたjavascriptインクルードファイルがチェックされますが、javascriptインクルードで実行されるajax転送はホームページから行われます。

ただし...ブラウザにLogin.phpのみを表示するように強制すると([更新]をクリックして)、JavaScriptが含まれていないことが判明したため、Chromeは裸のページを表示して適切に処理しました。

 

パート2

パスワードの保存を求めるプロンプトを表示するには、Chromeのいくつかの要件を満たす必要があります。それらの中には次のものが含まれます。

  1. フォーム要素を使用する必要があります

  2. ボタンではなく、送信を使用する必要があります

  3. 送信は実際の送信である必要があります。(送信機能をjavascript / Ajaxでオーバーライドすると、(おそらく)パスワードの保存を求めるプロンプトが表示されません。)

  4. ページが読み込まれるときにフォームが表示される必要があります。

     

jquery-mobileを使用する場合、3と4でつまずく可能性があります。

 

3に関して...

jquery-mobileは、リンクの場合と同じように、フォーム送信プロセスを自動的にハイジャックします。そのため、フォーム要素にdata-ajax = "false"を追加して、それができないようにする必要があります。

 

4に関して...

私のウェブサイトの最初のバージョンでは、ホームページにログインパネルがあり、ログインボタンでページの「下」からパネルが表示されていました。このメソッドは、ページの読み込み時にパネルを強制的に表示するまで、パスワードの入力を求めませんでした。

ログインパネルが常にホームページに表示されるようにしたくなかったので、別のログインページ(Login.php)を使用することにしました。ただし、jquery-mobileの個別のページへのリンクを処理する固有の方法は、ajax機能を使用してそれらをハイジャックすることです...ブラウザーは同じページにとどまると解釈します。つまり、Chromeの場合、Login.phpに移動することは、非表示のパネルを使用することと同じでした... Chromeは両方のリクエストをホームページにとどまると解釈したためです...どちらの場合も、ページが最初に読み込まれたときにフォーム要素は表示されませんでした。

于 2013-03-02T20:13:11.477 に答える