【问题标题】:"AutoComplete=Off" not working on Google Chrome Browser [duplicate]“AutoComplete=Off”在 Google Chrome 浏览器上不起作用 [重复]
【发布时间】:2013-08-20 19:01:13
【问题描述】:

我知道 Stackoverflow 上有一个类似的问题,但没有一个解决方案对我有用。

<form autocomplete="off" id="search_form" method="post" action="">
    <input autocomplete="off" type="text" />
</form>

如您所见,我将autocomplete=off 放在表单和输入字段上,但谷歌浏览器仍显示此自动完成列表。这在 Firefox 和 Safari 等其他浏览器中不会发生。

除了将autocomplete=off 放在表单标签上之外还有其他解决方案吗??

【问题讨论】:

  • 您使用的是哪种文档类型?
  • 您是否禁用了所有 Chrome 插件?
  • 如果您知道在 SO 上有类似或基本相同的问题,您至少应该引用它。但最好是帮助改进现有问题的答案,而不是生成具有不同答案集的问题的新副本。
  • 这是 Chrome 中的一个错误。我在表单和字段上都有&lt;!DOCTYPE html&gt;autocomplete="off",它仍然会自动完成,甚至将我的电子邮件地址与name="user[credit_card]" 放在错误的字段中!
  • 我知道这已被标记为重复,但这是我的解决方案。将自动完成属性设置为“关闭”不会在最新版本的 Chrome 中禁用 Chrome 自动填充功能。相反,您必须在每个输入上设置自动完成,如下所示&lt;input autocomplete="smartystreets"&gt; 您可以将自动完成设置为“开”或“关”以外的任何内容,它将禁用 Chrome 自动填充

标签: html google-chrome forms


【解决方案1】:

这是由于 Chrome 做出的设计决定(可以说任何 Chrome 用户想要这种行为)。

这就是谷歌所说的priority of constituencies

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

有一些解决方法,但很有可能在未来的 Chrome 版本中得到修复,因为 Chrome 开发人员认为他们的行为是正确的,而您的解决方法是一个错误。

即使您的解决方法确实有效,它也会给用户带来令人困惑的行为 - 他们希望自动填充能够根据他们的设置工作。

许多用户已经选择使用插件或脚本忽略应用程序自动完成设置,这些插件或脚本只是删除页面中的任何 autocomplete=off - 他们已经有了这样的选择。

您最好在设计时假设自动完成功能可以工作并考虑到这一点。

我个人讨厌网站不记得我的密码并覆盖那些使用浏览器扩展的密码。然而,我也为我的工作创建了应用程序,并且在那里召回密码被视为一种安全风险,因为用户可能会让他们的机器处于解锁状态。在我个人看来,用户不锁定他们的机器是本地 IT 的问题,而不是应用程序的问题,如果他们的用户不可信,本地 IT 可以禁用所有 Web 应用程序的所有密码自动完成功能。

不幸的是,为了通过安全检查,一些应用程序仍然必须禁用自动完成功能,有办法做到这一点,但它们都很糟糕。第一个hack是让密码输入全新:

<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" />

就像我说的,讨厌。

【讨论】:

  • 用例:我的零售店有一个网络应用收银机。我有多名员工使用这个网络应用程序。我绝对不需要密码管理器,因为我的管理员密码会被存储,非管理员用户可以更轻松地访问。
  • @BlairAnderson 是的 - 所以您希望自动完成功能始终关闭该机器。为您的个人计算机打开它,为共享计算机关闭它 - 在任何一种情况下,是否自动完成都是本地浏览器的选择,而不是应用程序。
  • 这么多反对票 - 有人介意在反对之前解释一下为什么这是一个糟糕的答案吗?
  • 感谢您节省了一天!没有任何效果,而您的解决方案只是成功了。
  • 当消费者构建独特的产品时,此功能根本没有帮助,它会为消费者插入随机数据,导致数据质量差,它会浪费制造时间和资源配置不当的产品。尊重 autocomplete="off" 会很简单,可以防止安全/不良数据/浪费。有谁了解如何更改规范中定义的地幔?我们想要第一个地幔,自动填充期望地幔。但铬似乎正在使用自动填充锚地幔html.spec.whatwg.org/multipage/…
【解决方案2】:

这可能是谷歌浏览器的一个错误,你不能通过创建隐藏输入来作弊。自动完成功能将获取第一个输入文本来填充数据。

<form autocomplete="off" id="search_form" method="post" action="">
    <input type="text" style="display:none" />
    <input autocomplete="off" type="text" />
</form>

【讨论】:

  • 从 Chrome 34 开始,此 hack 不再有效
  • 您还可以将自动完成设置为随机字符串,例如“noautocomplete”或“on”以外的其他内容。浏览器可以识别“关闭”,但不能识别随机字符串。这样做会禁用浏览器自动填充
【解决方案3】:

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

This is a hack. 为您的输入提供一个 id,例如 foo,并使用 JavaScript:

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

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

【讨论】:

  • 哇,即使那也没用。
【解决方案4】:

autocomplete 属性是 HTML5 中的新属性。

由于您没有提到DOCTYPE,我认为这是唯一可能的原因。更多详情请查看MDN's How to Turn Off Form Autocompletion

尝试添加以下HTML5 DOCTYPE

<!DOCTYPE html>

FYI: 在某些浏览器中,您可能需要激活 autocomplete 功能 这可以工作(在浏览器菜单的“首选项”下查看)。

以正确的方式使用它,在 form 元素下提及autocomplete 属性。但是对于input 标签,您不需要单独提及它。

<form autocomplete="off" id="search_form" method="post" action="">
    <input type="text" />
</form>

更新:您可以在这里找到autocomplete attribute and web documents using XHTML 中的解决方案列表。

【讨论】:

  • 您介意引用您的出处吗?
  • 我刚刚花了很长时间查看该页面,但它不包含该引用;除了这个页面本身之外,Google 上也没有做任何事情。
  • @rink.attendant.6 引用来自w3schools.com/tags/att_input_autocomplete.asp。 MDN 被广泛接受,而 W3Schools 则不然。
  • 虽然这个问题的一些答案在过去可能有效,但目前防止浏览器弹出密码管理器的一种方法是至少有两个单独的附加隐藏密码输入,每个都有不同的虚拟值,例如:stackoverflow.com/a/41882977/5150013
  • 添加一个环绕 &lt;form autocomplete="off"&gt; 对我来说在 Chrome 87 中效果很好!
【解决方案5】:

如果您使用 AJAX 调用将数据提交到后端。完成 AJAX 调用后,密码字段应清晰。则不会弹出密码保存提示。

例如: $(#foo).val("");

【讨论】:

  • 我认为这个问题与重置密码字段无关
【解决方案6】:

试试这个,搞砸了一段时间后对我有用

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 );
    });
}

【讨论】:

    猜你喜欢
    • 2015-07-18
    • 2019-12-13
    • 2016-03-20
    • 2014-06-02
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2014-05-05
    • 2013-08-10
    相关资源
    最近更新 更多