jquerymobile - Chrome不会提示在标准POST提交上保存密码

时间:2013-02-28 23:02:14

标签: google-chrome jquery-mobile passwords

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

  1. 转到主页

  2. 点击登录(这会转到Login.php)

  3. 输入登录名/密码

  4. 您已立即登录,但Chrome 提示您保存密码

  5. ...然而

    1. 转到主页

    2. 点击登录

    3. 刷新页面

    4. 输入登录名/密码

    5. 您现在已登录,Chrome 提示保存密码...

    6. 是什么给出的?唯一的区别是击中“刷新”。 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禁止保存密码功能?)

      提前致谢...这是我提出的第一个问题。

1 个答案:

答案 0 :(得分:2)

简短回答

从我的主页到Login.php的链接需要 a href 标记中的 data-ajax =“false”

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

长答案

第1部分

经过多次挖掘后,我发现jquery-mobile is to "hijack" all a href links and process them through its ajax functionality的正常行为。这意味着它将转换为Login.php作为ajax样式的传输,而不是标准的 a href 传输。标准传输检查Login.php是否有明确声明的javascript包含文件,但是通过javascript传输的ajax传输包括来自主页。

然而......当您强制浏览器只查看Login.php(通过点击刷新)时,它发现没有任何javascript包含,因此Chrome查看了正确处理的裸页。 / p>

第2部分

您必须满足Chrome的几项要求才能提示输入密码。其中包括:

  1. 您必须使用表单元素

  2. 您必须使用提交,而不是按钮

  3. 提交必须是真实的提交。 (如果用一些javascript / Ajax覆盖提交功能......它(可能)不会提示保存密码。)

  4. 页面加载时必须显示表单。

  5. 使用jquery-mobile时,3和4可以让你失望。

    关于3 ......

    jquery-mobile自动劫持表单提交过程,它对链接的处理方式......因此有必要将 data-ajax =“false”添加到表单元素,以防止它这样做。

    关于4 ...

    我网站的第一个版本在主页上有一个登录panel,其中登录按钮显示了页面“下方”的面板。在强制使用面板to be visible on page load之前,此方法不会提示输入密码。

    由于我不希望主页上始终显示登录面板,因此我决定使用单独的登录页面(Login.php)。然而,jquery-mobile固有的处理单独页面链接的方法是用它的ajax功能劫持它们......浏览器将其解释为停留在同一页面上。因此对于Chrome,导航到Login.php与使用隐藏面板相同...因为Chrome将两个请求都解释为停留在主页上......在任何一种情况下,当页面最初加载时,表单元素不可见