代码之家  ›  专栏  ›  技术社区  ›  sibidiba

浏览器是否支持Ajax加载的登录表单的自动完成功能?

  •  19
  • sibidiba  · 技术社区  · 15 年前

    我的问题是,浏览器(ie&ff)自动完成功能对我的登录表单不起作用。

    我有一个带有cakephp&jquery的webapp。允许访问者不受干扰地登录/注册。登录表单位于通过Ajax加载的DIV中。(这允许在不重新加载页面的情况下登录。)

    浏览器确实将其识别为一个登录字段,因为它们在单击登录时提示我保存凭据。它们确实保存了用户名/密码,因为它们出现在浏览器设置中保存的用户名/密码之间。但保存的用户名/密码不会自动输入。当页面加载时,它们不会显示为预先输入的。当我开始输入用户名时,用户名显示为一个建议,但即使选择了它,密码也不会在旁边输入。为什么?我怎样才能让这个工作?

    您可以自己测试它,下面是一个简单的Ajax登录表单:

    http://gablog.eu/test/ajaxlogin.html

    它加载以下登录表单,如果您转到下面的URL,自动完成功能只适用于普通表单,因此表单本身不存在问题,而是Ajax加载: http://gablog.eu/test/loginform.html

    布局:

    <div id="user-bar">
        <script type="text/javascript">
            $(function() {
               $("#user-bar").load('loginform.html').html();
            });
        </script>
    </div>
    

    加载的视图(未登录时):

    <form id="form-login" action="" onsubmit="login(); return false;">
        <input type="text" id="username" name="username"/>
        <input type="password" id="password" name="password"/>
        <input type="submit" value="Login"/>
        <div id="login-error" class="error-message"></div>
    </form>
    
    <script type="text/javascript">
        function login() {
            $.post('/ajax/login', $("#form-login").serialize(), function(data) {
                if (data.success) {
                    $("#user-bar").load('userbar.html').html();
                } else {
                    $("#login-error").html(data.message);
                }
            }, "json");
        }
    </script>
    

    澄清一下:我不想使用Ajax自动完成,我想让浏览器的自动完成在我的登录表单中起作用。这是我的表单和浏览器之间的问题。 当用户名/密码被保存时,jquery提交似乎扮演了一个次要角色。它们并不是为Ajax加载的HTML元素自动输入的! (测试站点不使用jquery提交。)相关问题: browser autocomplete/saved form not work in ajax request

    6 回复  |  直到 12 年前
        1
  •  12
  •   Quentin    15 年前

    至少在火狐中,自动完成会在页面加载期间触发。之后添加内容会错过机会的窗口。

    登录表单很小。我会从一开始就把它包含在页面中,并考虑用CSS隐藏它,直到它被需要为止。

        2
  •  3
  •   karim79    15 年前

    万一有帮助, msdn 说(在页面底部):

    注:如果以下两种情况 条件是真实的:

    • 网页是通过https传递的
    • 页面是 与标题或元标记一起传递,以防止 高速缓存

    …自动完成功能是 残疾,无论存在 或自动完成的值 属性。此注释适用于IE5, IE6、IE7和IE8。

    我鼓起了兴趣。

    .

        3
  •  1
  •   salgiza    15 年前

    如果您通过Ajax加载表单,我认为您无法让表单自动完成功能正常工作(从安全角度看,我不知道它是否真的会被滥用,但是脚本可以开始向页面加载字段以查看插入的数据对我来说并不太好)。

    如果可以,最好的选择是向php文件添加一个条件块,并根据用户是否登录来包含表单。如果由于某种原因您不能这样做,您可能希望尝试执行document.write()而不是Ajax调用(是的,使用document.write很难看:)

        4
  •  0
  •   Christian    14 年前

    我看到的情况是,当登录表单必须使用Ajax时——如果网站的其余部分加载为静态HTML(缓存)。无法静态显示登录表单(或授权用户信息)。

    因此,您的解决方案是在声明(结束标记)作为Ajax Pulled Loginform的HTML父元素的dom元素后立即提取表单,例如:

    <div id="loginforms_parent"></div>
    <script language="javascript">
        /* ajax request and insert into DOM */
    </script>
    

    浏览器的表单为dom onload。经过测试,在这种情况下,火狐会自动完成。

        5
  •  0
  •   Thomas Davis    13 年前

    我不喜欢在加载时将登录表单加载到我的页面,所以我向chrome提交了一个问题;

    http://code.google.com/p/chromium/issues/detail?id=123955&thanks=123955&ts=1334713139

        6
  •  0
  •   qdinar    12 年前

    答案如下: http://www.webmasterworld.com/javascript/4532397.htm . 它使用Submit方法做一些事情,然后使用Click方法。据我所知,如果表单未提交,则不会保存值。我认为该解决方案的作者只是让它提交,尽管用户没有单击提交按钮。