最近我遇到了一个问题,希望可以在所有浏览器中禁用自动完成功能。
Chrome浏览器有一个新的设置功能,你可以添加卡号,但是要求也需要禁用自动完成功能。
在所有浏览器中可行的方法是在表单级别上做 autocomplete=false
。
但是这不符合w3规则,他们强制要求使用 autocomplete=off|on
。
请问有谁能解释一下为什么 false
在所有浏览器中都能工作?
即使是ie8、所有火狐浏览器、safari等,但它并不符合规范。
最近我遇到了一个问题,希望可以在所有浏览器中禁用自动完成功能。
Chrome浏览器有一个新的设置功能,你可以添加卡号,但是要求也需要禁用自动完成功能。
在所有浏览器中可行的方法是在表单级别上做 autocomplete=false
。
但是这不符合w3规则,他们强制要求使用 autocomplete=off|on
。
请问有谁能解释一下为什么 false
在所有浏览器中都能工作?
即使是ie8、所有火狐浏览器、safari等,但它并不符合规范。
你说得没错。将自动填充属性设置为“off”在较新版本的Chrome中并不能禁用Chrome自动填充。
但是,您可以将自动填充设置为除“on”或“off”之外的任何值(如“false”,“true”,“nofill”),这将禁用Chrome自动填充。
这种行为可能是因为自动填充属性只接受“on”或“off”值,如果您提供其他值,则不会有任何作用。因此,如果您提供其他值,自动填充会停止工作/不起作用。
在当前版本的Chrome中,已发现将自动填充属性设置为“off”实际上确实起作用了。
另外,我还发现,只有在表单的每个<input>
标记中设置自动填充属性才起作用。
在Chromium错误列表的这里已经对这种模糊性进行了回应。
免责声明:这适用于Chrome版本47.0.2526.106(64位)
在Chrome版本72.XX之后:
Chrome不再忽略字段和表单级别上的autocomplete="off"
、autocomplete="no-fill"
或autocomplete="randomText"
。
我发现唯一的选择是通过欺骗Chrome,在虚拟的文本框和密码框上填充自动填充信息,然后将它们从用户视图中隐藏。
请记住,使用style="display: hidden"
或style="visibility: hidden"
的旧方法也被忽略了。
修复方式:
因此,创建一个带有height: 0px;overflow:hidden
的DIV
,这将仍然呈现HTML元素,但将它们从用户视图中隐藏。
示例代码:
<div style="overflow: hidden; height: 0px;background: transparent;" data-description="dummyPanel for Chrome auto-fill issue">
<input type="text" style="height:0;background: transparent; color: transparent;border: none;" data-description="dummyUsername"></input>
<input type="password" style="height:0;background: transparent; color: transparent;border: none;" data-description="dummyPassword"></input>
</div>
只需在HTML表单中添加上述div,它就应该起作用!
<input type="text" name="field1" autocomplete="my-field-name1" placeholder="请输入您的姓名">
最近 Chrome 停止使用 autocomplete="off" ,因为他们认为它被开发人员过度使用,而这些开发人员并没有考虑表单是否应该自动完成。因此,他们取消了旧方法,并让我们使用新方法,以确保我们真的不想自动完成表单。$("#selector").attr("autocomplete", "randomString");
这对我来说每次都可靠地运作。
注意:我在模态显示事件上调用了此 LOC。
自动完成的值除了off和false之外也是可行的。
autoComplete="nope"
autoComplete="foo"
autoComplete="boo"
autoComplete="anythingGoesHere"
在Chrome 76和React 16.9.0上进行了测试。
<input type="text" autocomplete="__away">
现在已经是2020年,如果有人和我一样仍然在为此苦苦挣扎,那么唯一有效的解决方案是将自动完成设置为任意随机字符串,这将禁用自动完成,但前提是必须在页面加载后完成设置。如果将该随机字符串保留为默认值,则Chrome将讨厌地将其重置为关闭状态。因此,对于我来说有效的方法是在文档准备就绪事件上(我正在使用jquery),添加以下代码:
window.setTimeout(function () {
$('your-selector').attr('autocomplete', 'google-stop-doing-this');
}, 1000);
如果没有超时设置,Chrome 在某种程度上仍会将其重置为关闭状态。
<input type="password" ..... autocomplete="new-password" />
readonly onfocus="this.removeAttribute('readonly');
例子:
<input type="text" class="form-control" autocomplete="false" readonly onfocus="this.removeAttribute('readonly');">