"自动完成=关闭"无法在Google Chrome浏览器上运行

use*_*270 22 html forms html5 google-chrome

我知道Stackoverflow上有一个类似的问题,但没有一个解决方案适合我.

<form autocomplete="off" id="search_form" method="post" action="">
    <input autocomplete="off" type="text" />
</form>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我同时将autocomplete=off表单和输入字段放在一起,但Google Chrome仍会显示此自动填充列表.这在Firefox和Safari等其他浏览器中不会发生.

除了autocomplete=off使用表单标签之外的任何其他解决方案?

Kei*_*ith 21

这是由Chrome做出的设计决定(可以说任何Chrome用户都希望这种行为).

这就是谷歌称之为选区优先权的原因:

  1. 用户为王!他们想要的是什么.
  2. 用户想要使用密码或自动填充管理器.
  3. Web应用程序说它不希望保存表单值.
  4. 用户的选择更重要,因此保留了表单值.

有一些方法可以解决这些问题,但很可能会在未来的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" />
Run Code Online (Sandbox Code Playgroud)

我已将所有内容简化为内容,但这应该让您了解黑客 - 没有插件或浏览器可以使用全新的名称自动填充输入.

如果您正确构建ARIA和标签(这样可以让浏览器/扩展程序找到并自动填充标签的输入),此解决方案就会中断.

所以选项2,也是可怕的,是等到自动完成功能被触发后再将空白字段清空:

<input type="text" name="username" 
    onchange="window.setTimeout(function() { 
        document.getElementById('password').value = ''; 
    }, 100)" />
<input type="password" id="password" />
Run Code Online (Sandbox Code Playgroud)

就像我说的那样,讨厌.

  • 用例:我的零售店里有一个网络应用收银机。我有多名员工使用此 Web 应用程序。我绝不想要密码管理器,因为我的管理员密码将被存储,非管理员用户可以更轻松地访问。 (2认同)
  • @BlairAnderson是-因此,您希望自动完成功能始终在该计算机上关闭。对于您的个人计算机,将其打开,对于共享计算机,将其关闭;无论哪种情况,是否自动完成都是本地浏览器而不是应用程序的选择。 (2认同)

小智 6

它可能是谷歌Chrome上的一个错误,你不能通过创建一个隐藏的输入作弊.自动完成功能将获得第一个输入文本以填充数据.

<form autocomplete="off" id="search_form" method="post" action="">
    <input type="text" style="display:none" />
    <input autocomplete="off" type="text" />
</form>
Run Code Online (Sandbox Code Playgroud)

  • 从Chrome 34开始,这种黑客攻击不再有效 (3认同)
  • 您还可以将自动完成设置为随机字符串,例如"noautocomplete"或"on"以外的其他字符串.浏览器构建为识别"关闭",但不识别随机字符串.这样做将禁用浏览器自动填充 (3认同)

fed*_*o-t 2

这似乎是 Google Chrome 中经常出现的问题,尽管在表单中添加自动完成功能在我的构建中确实有效。也许在新版本中它不再存在了。

这是一个黑客行为。为您的输入指定一个 id,例如foo,并在 JavaScript 中:

if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) {
    setTimeout(function () {
        document.getElementById('foo').autocomplete = 'off';
    }, 1);
}
Run Code Online (Sandbox Code Playgroud)

检查这是否适合您。唯一的缺点是,对于那些使用 Chrome禁用 JavaScript 的人来说,该字段仍然会自动完成。