0

Chrome 提示保存密码的时间似乎并不一致。考虑我网站上的以下两个过程......

  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 的链接需要a href标记中的data-ajax="false" 。

在我将 jquery-mobile 重新包含到 Login.php 之后,Login.php 上的表单标签也需要data-ajax="false"

 

长答案

第1部分

经过更多挖掘,我发现 jquery-mobile 的正常行为是“劫持”所有a href链接并通过其 ajax 功能处理它们。这意味着它以 ajax 风格的传输方式传输到 Login.php,而不是标准的 a href传输。一个标准的传输检查 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 回答