我知道Stackoverflow上有一个类似的问题,但没有一个解决方案适用于我。
<form autocomplete="off" id="search_form" method="post" action="">
<input autocomplete="off" type="text" />
</form>
正如您所看到的,我将autocomplete=off
放在表单和输入字段上,但Google Chrome仍会显示此自动填充列表。这在Firefox和Safari等其他浏览器中都不会发生。
除了将autocomplete=off
放在表单标记上之外的任何其他解决方案?
答案 0 :(得分:17)
这是由Chrome做出的设计决定(可以说任何Chrome用户想要此行为)。
原因是Google称之为priority of constituencies:
有很多方法可以解决这些问题,但很有可能会在未来的Chrome版本中修复这些问题,因为Chrome开发人员认为他们的行为是正确的并且您的解决方法是错误的。
即使你的解决方法确实有效,它也会给用户带来令人困惑的行为 - 他们希望自动填充根据他们的设置工作。
许多用户已经选择忽略带有插件或脚本的应用自动完成设置,这些插件或脚本只删除了页面中的任何autocomplete = off - 无论如何他们已经有了这个选择。
您最好在设计时假设自动填充功能可以正常工作并对此进行说明。
当网站不记得我的密码并覆盖那些使用浏览器扩展的密码时,我个人讨厌它。然而,我也为我的工作创建应用程序,并且召回密码被视为安全风险,因为用户可能会将其机器解锁。在我个人看来,没有锁定他们的机器的用户是本地IT而不是应用程序的问题,并且本地IT可以禁止所有Web应用程序的所有密码自动完成,如果他们的用户不可信任。
不幸的是,为了通过安全检查,一些应用程序仍然需要禁用自动完成功能,有办法实现,但它们都非常糟糕。第一个黑客是将密码输入全新:
<input type="hidden" name="password" id="realPassword" />
<input type="password" name="{randomly generated}"
onchange="document.getElementById('realPassword').value = this.value" />
我已将所有内容简化为内容,但这应该让您了解黑客 - 没有插件或浏览器可以使用全新的名称自动填充输入。
如果您正确构建ARIA和标签(因为这样可以让浏览器/扩展程序找到并自动填充标签中的输入),此解决方案就会中断。
所以选项2,也是可怕的,是等到自动完成功能被触发后再将该字段留空:
<input type="text" name="username"
onchange="window.setTimeout(function() {
document.getElementById('password').value = '';
}, 100)" />
<input type="password" id="password" />
像我说的那样,讨厌。
答案 1 :(得分:6)
这可能是Google Chrome上的一个错误,您无法通过创建隐藏的输入作弊。自动完成功能将获得第一个输入文本以填充数据。
<form autocomplete="off" id="search_form" method="post" action="">
<input type="text" style="display:none" />
<input autocomplete="off" type="text" />
</form>
答案 2 :(得分:2)
这似乎是谷歌浏览器中一个经常出现的问题,尽管在我的版本中将 形式的自动填充功能添加到了。也许在新版本中它不再存在。
This is a hack.为您的输入提供ID,例如foo
,以及JavaScript:
if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) {
setTimeout(function () {
document.getElementById('foo').autocomplete = 'off';
}, 1);
}
检查这是否适合您。唯一的缺点是,对于使用Chrome 和禁用JavaScript的用户,该字段仍会自动完成。
答案 3 :(得分:0)
autocomplete
属性是 HTML5
中的新内容。
由于你没有提到DOCTYPE
,我认为这是唯一可能的原因。有关详细信息,请查看MDN's How to Turn Off Form Autocompletion。
尝试添加以下 HTML5 DOCTYPE
。
<!DOCTYPE html>
FYI: 在某些浏览器中,您可能需要激活
autocomplete
功能 这工作(在浏览器菜单中的“首选项”下查看)。
您以正确的方式使用它,在 autocomplete
元素下提及form
属性。但是,您不需要单独提及input
标记。
<form autocomplete="off" id="search_form" method="post" action="">
<input type="text" />
</form>
更新:您可以在此处找到autocomplete attribute and web documents using XHTML中的解决方案列表。
答案 4 :(得分:0)
如果您使用AJAX调用将数据提交到后端。完成AJAX调用后,密码字段应清除。然后不会弹出密码保存提示。
例如: $(#富).VAL(&#34;&#34);
答案 5 :(得分:0)
尝试这个,在搞砸了一下后为我工作
if ( navigator.userAgent.toLowerCase().indexOf('chrome') >= 0 ) {
$('input[autocomplete="off"]').each( function(){
var type = $(this).attr( 'type');
$(this).attr( 'type', '_' + type );
$(this).attr( 'type', type );
});
}