Chrome提示保存密码时似乎不一致。从我的网站考虑以下两个过程...
转到主页
点击登录(这会转到Login.php)
输入登录名/密码
您已立即登录,但Chrome 未提示您保存密码
...然而
转到主页
点击登录
刷新页面
输入登录名/密码
您现在已登录,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禁止保存密码功能?)
提前致谢...这是我提出的第一个问题。
答案 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的几项要求才能提示输入密码。其中包括:
您必须使用表单元素
您必须使用提交,而不是按钮
提交必须是真实的提交。 (如果用一些javascript / Ajax覆盖提交功能......它(可能)不会提示保存密码。)
页面加载时必须显示表单。
使用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将两个请求都解释为停留在主页上......在任何一种情况下,当页面最初加载时,表单元素不可见