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

时间:2013-08-19 03:35:34

标签: html html5 forms google-chrome html-form

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

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

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

除了将autocomplete=off放在表单标记上之外的任何其他解决方案?

6 个答案:

答案 0 :(得分:17)

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

原因是Google称之为priority of constituencies

  1. 用户为王!他们想要的东西大多数
  2. 用户想要使用密码或自动填充管理器。
  3. 网络应用程序表示它不希望保存表单值。
  4. 用户的选择更为重要,因此会保留表单值。
  5. 有很多方法可以解决这些问题,但很有可能会在未来的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 );
    });
}