如何在Firefox中的登录/密码字段中使autocomplete = off工作

时间:2015-10-06 07:55:20

标签: html firefox autocomplete passwords

我想阻止浏览器存储和显示输入值。这就是我这样做的方式:

<form autocomplete="off">
<input type="text" autocomplete="off" name="login" />
<input type="password" autocomplete="off" name="pswd" />
...
</form>

但是由于一些疯狂的原因,即使我完全清除浏览器历史记录,浏览器也会继续存储和显示值。所以,我想知道为什么autocomplete="off"无效。可能还有另一种更合适的方法。 PS。我不确定它是否重要,但我使用jquery来构建我的表单。

修改

顺便说一句,与官方W3C documentation相反,HTML5中autocomplete="off"不受尊重(至少在FF中)。

7 个答案:

答案 0 :(得分:6)

From https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion#The_autocomplete_attribute_and_login_fields:

[...] many modern browsers do not support autocomplete="off" for login fields.

  • if a site sets autocomplete="off" for a form, and the form includes username and password input fields, then the browser will still offer to remember this login, and if the user agrees, the browser will autofill those fields the next time the user visits this page.
  • if a site sets autocomplete="off" for username and password input fields, then the browser will still offer to remember this login, and if the user agrees, the browser will autofill those fields the next time the user visits this page.

While the reasoning behind this is debatable, it's intended behavior.

答案 1 :(得分:3)

具有内置密码管理器的现代浏览器会在登录表单中忽略autocomplete="off"(通常特别是使用<input type="password">形式)。当最终用户通过这样的表单首次登录时,浏览器将询问最终用户是否记住该站点的登录信息。如果最终用户选择,则默认行为将继续(因此autocomplete属性将被尊重,无论其值如何)。但是,如果最终用户选择,则默认行为将被覆盖,并且其行为就好像autocomplete 总是打开一样。这是默认情况下的浏览器配置设置。 MDN中也提到了这一点。

您只需使用 Ajax 提交表单即可解决此问题。换句话说,而不是使用&#34;普通香草&#34;同步HTML POST表单,使用XMLHttpRequest(如果需要间接通过例如jQuery或等效的)。目前的浏览器无法通过Ajax识别登录,因此不会要求最终用户记住登录信息。

如果您的Web框架没有提供内置的Ajax工具,那么请考虑投入jQuery。然后,下面的问题是不引人注意地增强现有形式。以下基本启动示例假定您已重新设计服务器端以返回纯文本truefalse作为响应,具体取决于登录是否成功。如果需要,您可以根据X-Requested-With标题的值

有条件地做出响应
$(document).on("submit", "#loginFormId", function() {
    var $form = $(this);

    $.post($form.attr("action"), $form.serialize(), function(response) {
        if (response) {
            window.location = "home.html"; // Redirect to homepage.
        } else {
            $("#errorMessageId").text("Unknown login, please retry");
            $form[0].reset();
        }
    });
});

答案 2 :(得分:1)

您使用的是Chrome吗? 也许此bug是相关的,尤其是comment

评论说明

  

自动填充=&#34;关闭&#34;无论是否保存,自动填充数据都不受尊重   或填写。您可以在中查看自动填充数据   铬://设置/自动填充。它包括地址和信用卡。

     

自动填充=&#34;关闭&#34;仍然尊重自动填充数据,两者都有   保存和填充。我知道术语令人困惑。自动完成   数据只是尝试匹配名称属性。所以,如果你已经进入   &#34; user@example.com"输入名称=&#34;电子邮件&#34;在过去,和   Chrome看到另一个名字=&#34;电子邮件&#34;输入,Chrome将提供完成   那个数据。但是,自动完成=&#34;关闭&#34;将阻止这种情况发生。

caniuse.com也是一个很好的资源,可用于检查哪些浏览器支持给定的功能。

答案 3 :(得分:1)

防止浏览器填写密码但使用“密码”类型...

的解决方法

尝试使用:<input type='text' ... onfocus=' this.type="password" ' autocomplete='off'/>

答案 4 :(得分:1)

聚会晚了一点,但是如果autocomplete="off"不受浏览器的尊重,那么许多现代浏览器都不会这样做,我总是使用autocomplete="new-password"。确保将其添加为输入元素的第一个属性。

Read all about it on this MDN Web Doc

答案 5 :(得分:1)

autocomplete =“ off”和autocomplete =“ false”似乎对chrome和firefox均不起作用,您可以编写除这两者之外的任何内容,例如autocomplete =“ none”即可。 通过以下链接: Chrome automcomplete disabling-chrome-autofill

答案 6 :(得分:0)

我认为你应该这样 删除""autocomplete上的name,因为它们不属于值。

<form autocomplete="off">
 <input type="text" name="login" />
 <input type="password" name="pswd" />
</form>