autocomplete =“off”不适用于Google Chrome

时间:2014-08-10 13:15:20

标签: asp.net visual-studio autocomplete

过去曾多次询问此问题,但遗憾的是我无法停用Google Chrome的自动填充功能(v.36.0.1985.125 m)

我已经尝试过了

"AutoComplete=Off" not working on Google Chrome Browser

How do I stop Chrome from pre-populating input boxes?

how to disable google chrome suggestion list when using twitter bootstrap typeahead?

到目前为止的代码测试

<form autocomplete="off">

<asp:textbox autocomplete="off">

AutoCompleteType="Disabled"

但我仍然在登录页面上获得自动提交的数据。即使更改了文本框ID,也会填充密码。

8 个答案:

答案 0 :(得分:3)

由于我遇到了同样的问题,并且随着浏览器获取最新更新,似乎所有“替代方案”都停止工作,所以我遇到了一个“肮脏”的解决方案,使我完全感到困惑。

如果我们在每个字段上都想禁用自动完成功能并将其自动完成属性设置为无效值(仅“ off”和“ on”有效),浏览器将因此而停止尝试自动填充这些字段

惊讶吗?我也是!

示例:

<input type="text" autocomplete="stopdoingthat" />

显然可以。我知道这很愚蠢,但这是一种“脏”的东西,目前仍然有效。

答案 1 :(得分:2)

最近版本的Google Chrome正在强制自动填充,而不管Autocomplete=off您将需要一点点黑客攻击。以前的一些黑客不再工作(34个以上版本)

我在Google Chrome v36上测试了以下代码。

删除&#34; name&#34;和&#34; id&#34;来自元素的属性,并在1ms后将它们分配回来。这在我的案例中完美无缺。

将此代码放入文档准备就绪。

 $(document).ready(function () {

$('form[autocomplete="off"] input, input[autocomplete="off"]').each(function () {

                var input = this;
                var name = $(input).attr('name');
                var id = $(input).attr('id');

                $(input).removeAttr('name');
                $(input).removeAttr('id');

                setTimeout(function () {
                    $(input).attr('name', name);
                    $(input).attr('id', id);
                }, 1);
            });
         });;

答案 2 :(得分:0)

这个readonly-fix对我有用:

修复浏览器自动填充:readonly并将焦点设置为焦点(点击鼠标并在字段中进行制表)

 <input type="password" readonly  
     onfocus="$(this).removeAttr('readonly');"/>

顺便提一下,Chrome和Safari自动填充行为更多信息

有时即使autocomplete = off也不会阻止将凭据填入错误的字段,但不会阻止用户或昵称字段。我想,Chrome和Safari会查找密码字段以插入您保存的凭据。然后用户名自动填充到最近的textlike-input字段中,该字段出现在DOM中的密码字段之前(仅因为观察而猜测)。由于浏览器是最后一个实例而您无法直接控制它,但上面的只读技巧修复了它。 : - )

答案 3 :(得分:0)

想想我会用2016年的帖子更新这个。我使用了Sangram的解决方案以及dsuess'的组合。截至本文发表时,这对我有用。

不幸的是,Sangram的解决方案不再适用于我以后的Chrome版本,但是使用dsuess的方法将字段标记为只读,而不是视觉上的吸引力(因为它们保持只读,直到您实际关注元素,这不是这是最直观的方式 - 但是无论什么工作,对吧?),仍然有用。

通过将两者结合起来,我们不再需要用户专注于该领域。这是我的网页代码:

<asp:TextBox ID="TeamName" runat="server" TextMode="SingleLine" AutoCompleteType="Disabled" ReadOnly="true"></asp:TextBox>

对于好奇的,在被IIS解析之后,渲染到以下原始HTML:

<input name="ctl00$MainContent$uc_CreateTeam$TeamName" type="text" autocomplete="off" id="MainContent_uc_CreateTeam_TeamName" readonly="readonly">

随附的js:

// Disable autocomplete for form fields. This is done by setting the 'autocomplete' attribute (which is deprecated)
// as an indicator that we want this field to not be autofilled. We also set these forms to load as readonly (which
// will cause browsers to ignore them), and now we mark them writable.
$(document).ready(function() {
  $('form[autocomplete="off"] input, input[autocomplete="off"]').each(function() {
    var input = this;
    setTimeout(function() {
      $(input).removeAttr('readonly');
    }, 200); // 100 does not work - too fast.
  });
});

希望这可以帮助几年后仍然在寻找解决方案的任何散兵游勇!

答案 4 :(得分:0)

我的建议更改控件的名称。例如,我有一个名为txtFirsName的控件,它始终向我显示自动完成建议,我通过txtFN和Ready进行了更改!

答案 5 :(得分:0)

看,解决此问题的唯一方法是向Chromium开发人员提出申诉。上他们的论坛,告诉他们这是什么痛苦。每种解决方法最终都会被它们破坏。

https://bugs.chromium.org/p/chromium/issues/detail?id=914451

到目前为止,在控件上具有唯一的ID可以解决该问题。

我的建议是将用户的会话ID用作页面上控件ID的一部分。目前,这一切都是可行的。但这不会永远。

答案 6 :(得分:0)

将密码字段的类型设置为“文本”,然后单击将其更改为“密码”。

HTML:

<input autocomplete="off" id='username'>
<input autocomplete="off" id='password' type="text" onclick="changeType('password')">

js:

changeType(id) {
    document.getElementById(id).setAttribute('type', 'password');
}

答案 7 :(得分:0)

对于 Asp.Net TextBox,添加 TextMode="Search" 和 AutoCompleteType="Disabled" 对我有用

<asp:TextBox runat="server" ID="txtAddress" CssClass="form-control" TextMode="Search" AutoCompleteType="Disabled"></asp:TextBox>

我在 Edge(版本 89.0.774.48)和 Chrome(版本 88.0.4324.190)中对此进行了测试