如何使Firefox浏览器中的登录/密码字段中的autocomplete=off生效
如何使Firefox浏览器中的登录/密码字段中的autocomplete=off生效
我想防止浏览器存储和显示输入值。以下是我的做法:
但出于某些荒谬的原因,即使我完全清除浏览器历史记录,浏览器仍然会存储和显示值。所以,我想知道为什么 autocomplete="off"
不起作用。可能还有其他更合适的方法来解决这个问题。顺便说一句,虽然官方的 W3C 文档中提到,在 HTML5 中,autocomplete="off"
不被尊重(至少在 FF 中)。
在Firefox中,使用属性`autocomplete="off"`或`autocomplete="false"`来禁用自动填充功能似乎不起作用。但是,可以使用其他值如`autocomplete="none"`来实现这一目的。
这个问题的解决方法如下:
1. 首先,查看以下链接,了解如何在Chrome中禁用自动填充功能:
- [Chrome automcomplete](https://stackoverflow.com/questions/47775041)
- [disabling-chrome-autofill](https://stackoverflow.com/questions/15738259)
2. 在Firefox中,如果`autocomplete="off"`不起作用,可以尝试使用`autocomplete="none"`来禁用自动填充功能。
3. 如果以上方法都无效,可以尝试使用`autocomplete="new-password"`来解决问题。
如何使Firefox中的自动完成=关闭在登录/密码字段中起作用?
现代浏览器内置的密码管理器忽略登录表单中的autocomplete="off"
(通常是指具有<input type="password">
的表单)。当用户首次通过这样的表单登录时,浏览器会询问用户是否要记住此网站的登录信息。如果用户选择No,则默认行为将继续(因此,autocomplete
属性将被尊重,无论其值如何)。但是,如果用户选择Yes,则默认行为将被覆盖,并且它将表现得好像autocomplete
总是被打开一样。这是浏览器的默认配置设置。这也在MDN中提到。
您可以通过简单地使用Ajax来绕过这个问题。换句话说,不要使用“纯净的”同步HTML POST表单,而是利用XMLHttpRequest
(如果必要的话,间接地通过jQuery或等效方法)。当前的浏览器不会识别通过Ajax进行的登录,因此不会要求用户记住登录信息。
如果您的Web框架不提供内置的Ajax功能,那么考虑使用jQuery。然后,可以通过以下代码来对现有表单进行无侵入式增强。下面的基本示例假设您已经重新设计了服务器端,以根据登录是否成功返回纯文本true
或false
的响应。如果必要,可以根据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"; // 重定向到主页。 } else { $("#errorMessageId").text("Unknown login, please retry"); $form[0].reset(); } }); });
在Firefox浏览器中,使用autocomplete="off"来禁用登录/密码字段的自动填充功能可能会失效。根据https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion#The_autocomplete_attribute_and_login_fields中的描述,许多现代浏览器不支持在登录字段中使用autocomplete="off"。
具体原因如下:
- 如果一个网站在表单中设置了autocomplete="off",并且该表单包含用户名和密码输入字段,那么浏览器仍然会提供记住登录信息的选项,并且如果用户同意,浏览器会在下次访问该页面时自动填充这些字段。
- 如果一个网站在用户名和密码输入字段中设置了autocomplete="off",那么浏览器仍然会提供记住登录信息的选项,并且如果用户同意,浏览器会在下次访问该页面时自动填充这些字段。
虽然这个行为的合理性存在争议,但这是浏览器的预期行为。
那么有没有替代方法来实现不再有效的autocomplete="off"呢?个人没有尝试绕过这个行为,所以只能做出推测。可能有效的方法是不将用户名、密码和提交按钮放在一个表单中,而是在点击按钮或按下回车键后,使用JavaScript将用户名和密码复制到一个隐藏的表单中,然后通过编程方式提交。尽管我一般认为绕过预期行为是一个坏主意,并且会在后续过程中引发问题,比如用户抱怨他们的表单不像他们习惯的那样工作。