2013-02-28 55 views
0

Chrome在提示保存密码时似乎并不一致。从我的网站,请考虑以下两个过程...jquerymobile - Chrome不会提示在标准POST中保存密码提交

  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禁止保存密码功能?)

在此先感谢...这是我问的第一个问题。

回答

2

简短的回答

从我的主页上的login.php链接在A HREF标签需要数据阿贾克斯= “假”

我重新包括的jquery移动到的login.php完成后,在所述的login.php形式标签还需要数据AJAX =“假”

 

龙答案

第1部分

更多的挖掘后,我发现,对于正常行为的jQuery移动is to "hijack" all a href links and process them through its ajax functionality。这意味着它将转移到Login.php作为ajax样式的传输,而不是标准的传输。标准传输会检查Login.php中是否包含其特定的javascript包含文件,但通过javascript包含的ajax传输包含在主页中。

但是,当您强制浏览器仅查看Login.php(通过单击刷新)时,它发现没有任何JavaScript包含,因此Chrome浏览器查看裸页并正确处理它。

 

第2部分

你必须满足几个要求Chrome浏览器提示保存密码。其中包括:

  1. 你必须使用一个形式元素

  2. 你必须使用一个提交,不是一个按钮

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

  4. 页面加载时窗体必须可见。

     

当使用jQuery移动,3和4可以发觉你的工作。

 

对于3 ...

jQuery的移动自动劫持表单提交过程中,它的链接的方式做......所以有必要增加数据阿贾克斯=”假“形式元素,以防止它做到这一点。

 

对于4 ...

我的网站的第一个版本已经在主页上登录panel在登录按钮从“下”的页面显示面板。这种方法不会提示输入密码,直到我强制面板to be visible on page load

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