如何在所有浏览器中禁用表单自动填充?

时间:2015-08-29 18:01:52

标签: html google-chrome internet-explorer firefox autocomplete

我查看number posts所有指向使用自动完成属性的不同方式,但我还没有在我的所有浏览器中使用此功能。我见过一些非常丑陋的解决方法,例如this,但我正在寻找一些干净简单的东西。

在所有(或至少,大多数)常见浏览器上禁用文本字段自动填充的好方法是什么?

3 个答案:

答案 0 :(得分:1)

为了使那些遵守规则的守法浏览器始终在表单和输入字段上启用“自动完成”(具有“ off”值),这始终是一个好的开始-也有可能发生的情况是“另一天” “浏览器...可能会感觉合规性不是很好。

直到这一天,都需要黑客入侵。我注意到,Chrome至少在三个位置寻找匹配数据:标签(上下文),名称和占位符。如果输入字段中缺少“名称”字段,它将同时在“标签”和占位符中查找,但是如果“名称”字段存在,则将仅在“名称”和“占位符”中查找。

此脚本在必须防止自动完成的输入字段上利用Bootstrap中的“ form-control”类。使用其他任何您喜欢的类或过滤器。还要假设使用了占位符-如果没有,请删除该部分。

$(document).ready(function() {
   // Begin
   var this_obj = null, this_placeholder = null, this_name = null;
   $(".form-control").focus(function() {
      this_obj = this;
      this_name = $(this).prop("name");
      this_placeholder = $(this).attr("placeholder");
      $(this).prop("name", "NaN" + Math.random());
      $(this).attr("placeholder", "...");
   }).blur(function() {
      $(this_obj).prop("name", this_name);
      $(This_obj).attr("placeholder", this_placeholder);
   });
   // End
}); 

注意:将占位符留空实际上可能无意间触发了自动完成功能,因为显然忽略了空分配​​。

可以避免通过this_obj访问这两个变量this_name和this_placeholder,但是为了便于阅读和清楚起见,我希望保留它们。

该脚本是erm ..挺不引人注目的,因为它会自行清理,并且只需要一个匹配的类或属性。

它可以在68.0.3440.106版本(官方版本)(64位),IE11 11.228.17134.0和Firefox 61.0.2(64位)中运行。抱歉,尚未测试其他人。

答案 1 :(得分:0)

为所有输入标记添加一个类,假设no-complete

在你的js文件中添加以下代码:

setTimeout(function (){
   $('.no-complete').val ("");
},1);

答案 2 :(得分:0)

以下代码将禁用FF,IE和Chrome中的自动填充功能。

<script>
    $(document).ready(function () {
    // IE & FF
    $('input').attr('autocomplete', 'off');
    // Chrome
    if ( $.browser.webkit ) {
        $('input').attr('autocomplete', 'new-password');
    }});
</script>