【问题标题】:Is autocomplete="off" compatible with all modern browsers?autocomplete="off" 是否与所有现代浏览器兼容?
【发布时间】:2011-04-21 13:32:13
【问题描述】:

我刚刚被要求阻止浏览器保存输入到特定表单字段中的数据。自从我做 web 开发以来已经有好几年了,这是一个相对较新的能力。我能够找到表单字段属性 autocomplete="off",但似乎找不到任何说明哪些浏览器支持它的文档。谁能指出表单属性和浏览器兼容性图表的正确方向?

【问题讨论】:

标签: html forms


【解决方案1】:

td;dr:为了检查跨浏览器的兼容性,这里是一个官方 MDN 文档,关于关闭自动完成功能,并带有兼容性链接 - https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion


更长一点的回答:您的问题是因为 Chrome 的自动填充功能,这是 Chrome 在此错误链接中的立场 - https://bugs.chromium.org/p/chromium/issues/detail?id=468153#c164

简单来说,有两种情况-

  • [CASE 1]:您的input 类型不是password。在这种情况下,解决方案很简单,分为三个步骤。

    • name 属性添加到input
    • name 不应以电子邮件或用户名之类的值开头,否则 Chrome 最终仍会显示下拉菜单。例如,name="emailToDelete" 显示下拉菜单,但 name="to-delete-email" 不显示。同样适用于autocomplete 属性。
    • 添加autocomplete属性,并添加一个对你有意义的值,比如new-field-name

    它看起来像这样,并且在您的余生中,您将不会再看到此输入的自动填充(并且您输入的值不会被缓存)-

    <input type="text/number/something-other-than-password" name="x-field-1" autocomplete="new-field-1" />
    
  • [案例 2]input typepassword

    • 好吧,在这种情况下,无论您是否试用过,Chrome 都会向您显示管理密码/使用现有密码的下拉菜单,并显示更新缓存密码的提示。 Firefox 也会做类似的事情,所有其他主要浏览器也是如此。看看我在最顶部分享的 MDN 文档链接。
    • 在这种情况下,如果您真的想阻止用户看到管理密码的下拉菜单或保存凭据的提示,您将不得不使用 JS 来切换输入类型,如其他相关问题中所述.

【讨论】:

    【解决方案2】:

    事实上,在所有最新的浏览器中,用户名和密码字段都不会对 AutoComplete=off 做出反应。

    【讨论】:

      【解决方案3】:

      某些解决方案在现代浏览器中不起作用。

      这里给出了另一个解决方案链接。它适用于所有现代浏览器。

      Input type=password, don't let browser remember the password

      您可以在这个给定的解决方案中使用 autocomplete="off"

      【讨论】:

        【解决方案4】:

        除了Maxthon Browser 我想,他们在中国很有名,现在在世界范围内都有名气。他们没有很好地对待 Autotocomplete=off power。它不适用于他们。

        【讨论】:

        • 是的,傲游不会尊重autocomplete=off,但你可以通过设置ismxfilled='0'强制它不自动完成字段
        【解决方案5】:

        请注意,所有主流浏览器都在向 ignoring the attribute for password fields 移动。

        我只能提供轶事证据,但我还没有遇到不尊重autocomplete="off"的浏览器,这个经验包括:

        • Firefox 1.5+(Windows 和 Ubuntu)
        • Opera 6+(Windows 和 Ubuntu)
        • Chrome v2+(Windows 和 Ubuntu)
        • 顿悟 0.8 (ish) (Ubuntu)
        • Midori(我不记得哪个版本了)
        • Safari v1+ (Windows)
        • IE 4 - 8,Windows。

        我知道 Greasemonkey 脚本以及可能的其他用户脚本可以禁用 autocomplete 设置。

        我发现有几篇文章可能对您有用:

        1. How to turn off form auto-completion
        2. Using auto-complete in html forms

        【讨论】:

        • 感谢这些文章。我知道有些脚本可以禁用该设置,但我们能做的只有这么多。如果有人希望他们的浏览器将他们的信用卡信息保存在他们的个人计算机上,我们无法阻止它。我们确实在努力避免将数据保存在共享机器上。
        • @EmmyS,不,那是真的。一个相当具有技术意识的用户会费心实施反自动完成解决方案,用户在他们的机器上对您的网站做什么取决于他们,而不是你。 =)
        • @DavidThomas - 感谢兼容性列表,在 caniuse、w3c 或其他地方找不到好的兼容性。 :) +1
        • @EmmyS "我们确实在努力避免将数据保存在共享机器上。" 正确的做法是在共享机器上正确设置浏览器机器,这样它们就不会在会话之间保留任何信息。
        • @curiousguy - 是的,如果您可以控制共享机器,那是个好主意。在那种情况下我们没有。
        【解决方案6】:

        密码管理器现在在以下主要浏览器中忽略 password 字段的 autocomplete 属性:

        在表单字段上禁用autocomplete 应该仍然可以正常工作,但不再影响密码管理器。

        【讨论】:

        • 它没有。我刚测试过。甚至在表单字段上放置了额外的autocomplete="false",除了一个,它存在于表单元素本身上。一点效果都没有。我想说的是,所有主要浏览器都会忽略自动完成功能。
        【解决方案7】:

        从 Chrome v34 开始,autocomplete="off" 现在默认被忽略。

        可以通过访问chrome://flags在标志配置中禁用这个有点争议的功能

        http://news.softpedia.com/news/Chrome-34-Seeks-to-Save-All-Your-Passwords-436693.shtml

        【讨论】:

        • 请注意,Chrome 中的此更改仅影响密码字段非密码字段仍然遵循 autocomplete="off" 属性。
        【解决方案8】:

        如果你能够使用 JavaScript 和 jQuery,你可以将它放在加载 html 中:

        $('#theform input').val('');
        

        【讨论】:

        • 这是在使用 Mootools 的 Joomla 内部使用的 - 与 mootools 和 jquery 存在冲突,所以我不能这样做。不过,我会记住它以供将来参考。
        • 参考 mootools 文档,您可以这样做 $$('.emptyThisInForm').each(function(el){ el.value = ''; });
        • 这段代码会弄乱复选框和单选按钮。可能更优雅的是$('#theform')[0].reset() 将其强制恢复为 HTML 中指定的默认值。
        • 要只影响密码字段,您可以使用更具体的 jQuery 选择器,例如:$( '#theform input:password' ).val('');
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-02
        • 2013-08-10
        • 2018-12-30
        • 2011-07-03
        • 2013-06-04
        • 2011-03-10
        • 2014-10-03
        相关资源
        最近更新 更多