'autocomplete="off"'在Chrome中不起作用解决方案

最近项目中遇到一个令人头疼的问题,查阅各种资料,尝试各种方法,最终得以解决;哎···下面就说说这心酸的历程吧。

大家都知道autocomplete属性是表单字段中的HTML5新属性,该属性有两种状态值,分别为"on" 和 "off",该属性可省略:省略属性值后默认值为"on",也可以省略属性名,直接写入关键字on或off。

网站项目中,有登录和注册的弹框,在除chrome的浏览器中一切都ok,一旦在谷歌浏览器中,问题来了:
首先从登录弹框中登陆成功,chrome会弹出是否保存密码的提示框,点击保存密码按钮,


然后接着退出账户,
这时打开注册弹框,你会发现注册弹框中用户名和密码也被默认填写进去了(登录弹框中默认填写进去符合逻辑),


这现象就诡异了,开始各种查,cookie,本地缓存,等等,都解决不了这问题;

查阅后,很多没有这个的解决方案。


1  通常我们会在form表单上加入autocomplete="off" 或者 在输入框中加入autocomplete="off"

<form method="post" action="" name="login" autocomplete="off">

</form>
//或者
<input id="name" type="text" name="name" maxlength="20"  autocomplete="off">

2  但是有一种情况例外,就是表单中有input[type="password"],点击保存密码后,在Chrome浏览器则自动填充了用户名和密码的输入框;为了统一样式,我们需要就对Chrome的问题经行单独处理。

总结了5种解决方案,如下:

1 修改value值(目前已失效,随着chrome版本的升级,现今版本已不再能获取到value值了,所以无法对其进行操作,貌似chrome自动填充的表单的value值是存在 DocumentFragment里的div中的,暂不知道怎么去处理,等待大神告知)

if(navigator.userAgent.toLowerCase().indexOf("chrome") != -1){
			var inputers = document.getElementsByTagName("input");
			for(var i=0;i<inputers.length;i++){
				if((inputers[i].type !== "submit") && (inputers[i].type !== "password")){
					inputers[i].value = " ";
				}
			}
			setTimeout(function(){
				for(var i=0;i<inputers.length;i++){
					if(inputers[i].type !== "submit"){
						inputers[i].value = "";
					}
				}
			},100)
		}

2 修改disabled属性

if(navigator.userAgent.toLowerCase().indexOf("chrome") != -1){
			var inputers = document.getElementsByTagName("input");
			for(var i=0;i<inputers.length;i++){
				if((inputers[i].type !== "submit") && (inputers[i].type !== "password")){
					inputers[i].disabled= true;
				}
			}
			setTimeout(function(){
				for(var i=0;i<inputers.length;i++){
					if(inputers[i].type !== "submit"){
						inputers[i].disabled= false;
					}
				}
			},100)
		}

3 去除输入框的name和id属性

if(navigator.userAgent.toLowerCase().indexOf("chrome") != -1){
			var inputers = document.getElementsByTagName("input");
			for(var i=0;i<inputers.length;i++){
				if((inputers[i].type !== "submit") && (inputers[i].type !== "password")){
					var input = inputers[i];
					var inputName = inputers[i].name;
					var inputid = inputers[i].id;
					inputers[i].removeAttribute("name");
					inputers[i].removeAttribute("id");
					setTimeout(function(){
						input.setAttribute("name",inputName);
						input.setAttribute("id",inputid);
					},1)
				}
			}
		}

4 可以在不需要默认填写的input框中设置  autocomplete= "new-password"

网上咱没有找到对其详细解释,但是发现163邮箱的登录注册是这么用的,


所以就借鉴借鉴咯,测试之后也是可以解决问题的,也是最简单的解决办法,网易给您点个赞!

5 修改readonly属性

<input type="password" readonly οnfοcus="this.removeAttribute('readonly');"/>


参考来源:

http://stackoverflow.com/questions/15738259/disabling-chrome-autofill/29582380#29582380

  • 24
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
autocomplete="off"不生效的原因是因为浏览器内部也会默认开启一个输入字段后自动补全的功能。即使将autocomplete值设为off,在某些情况下仍会失效。为了解决这个问题,可以将该属性赋一个除on或off之外的任意值,例如autocomplete="new-pwd"。这样可以绕过浏览器的默认设置,确保autocomplete属性生效。\[1\]另外,还有一种方法是在input框设置autocomplete="new-password",虽然官方只有"on"和"off"两个值,但是"new-password"在一些网站上也被使用,并且经过测试是有效的。\[2\]总之,为了确保autocomplete="off"生效,可以尝试使用这些方法来绕过浏览器的默认设置。\[3\] #### 引用[.reference_title] - *1* [autocomplete="off" 不生效的解决方法](https://blog.csdn.net/MrLiber/article/details/83214232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [autocomplete=“off“‘不起作用解决方案](https://blog.csdn.net/baidu_39812199/article/details/112218582)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* ['autocomplete="off"'在Chrome不起作用解决方案](https://blog.csdn.net/weixin_34520360/article/details/117840063)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值