700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > html 自动填充缓存 禁止input密码自动填充及浏览器缓存密码账号解决方案

html 自动填充缓存 禁止input密码自动填充及浏览器缓存密码账号解决方案

时间:2020-05-05 21:13:43

相关推荐

html 自动填充缓存 禁止input密码自动填充及浏览器缓存密码账号解决方案

禁止自动填充方案

readonly οnfοcus="this.removeAttribute('readonly')"

这方案亲测有效,简单直接,把上面代码直接复制放到input标签就上就行。

ps:现有的网上多数加隐藏input获取值,都是解决默认填充的,而剩下的方案都是只能实现部分功能。

但是这个方案 如果使用password还是会引起浏览器提醒是否保存密码,并不能禁用缓存,只能不自动把账号密码填充进去。

为了,当type="password"的时候,做了以下测试:

动态设置,初始化为了text,输入之后变为password。失败:在谷歌上,只要设置过password这个input就能引起浏览器反应(出现钥匙的标签,继而提交的时候弹出提示)。

因为是input为空的时候,钥匙会消失。输入值就会出现,并且js操作的值和初始化值的不会出现钥匙,所以能不能把这个动作禁止了,浏览器接受不到就不出现。按照DOM事件的思路,禁用了input的所有事件的冒泡,默认事件,无效。失败:完全不知道浏览器是怎么触发得。

继而放弃禁止出现钥匙,那么表单提交动作浏览器能不能禁止,一堆操作禁止,失败:同2一样浏览器并不是在事件机制接受到的触发,或者是在我们事件机制之前?不得而知

至此,原生的passwraod已经没有思路来解决这个问题(如果有请留言,作者尝试后更新文章),那么我们就来打造了一个password。

首先,什么都不说,直接上解决方案。

第一步:引入js

; (function (name, definition) {

if (typeof define === 'function') {

define(definition)

} else if (typeof module !== 'undefined' && module.exports) {

module.exports = definition()

} else {

this[name] = definition()

}

})('Text2Password', function () {

function Text2Password(opts) {

let { id, callback = () => { } } = opts, input = document.getElementById(id), _this = this;

_this._value = [], _this.input = input, _this.callback = callback;

input.addEventListener("copy", Text2Password.preventDefault)

input.addEventListener("cut", Text2Password.preventDefault)

input.addEventListener("paste", Text2Password.preventDefault)

input.addEventListener("input", _this.passwordHandler.bind(_this))

this.init();

Object.defineProperty(_this, "value", {

get: function () {

return _this._value.join("")

},

})

return this

}

Text2Password.preventDefault = function (e) {

var e = e || window.event;

e.preventDefault();

}

Text2Password.prototype.init=function(){

this.input.value.split("").forEach(function(value){

this._value.push(value)

}.bind(this))

this.input.value = new Array(this._value.length).fill("*").join("");

}

Text2Password.prototype.passwordHandler = function () {

var cursor = this.input.selectionStart, cvalue = this.input.value.split(''), ovalue = this._value;

var changeLen = cvalue.length - ovalue.length;

if (changeLen > 0) {

// changeLen 如果是正数 说明新数据的长度比旧数据长 所以曾嘉乐数据

ovalue.splice(cursor - 1, 0, ...cvalue.slice(cursor - 1, cursor - 1 + changeLen))

}

if (changeLen < 0) {

// 删除某些元素

ovalue.splice(cursor, Math.abs(changeLen))

}

cvalue.forEach(function (value, index) {

if (value != "*") {

ovalue[index] = value;

}

})

this.input.value = new Array(cvalue.length).fill("*").join("");

this.input.selectionStart = cursor;

this.input.selectionEnd = cursor;

typeof this.callback == "function" && this.callback();

}

return Text2Password

})

第二步:初始化。

第一:注意我们这个input的type是text,但是会转化为跟password一样的表现。

第二:因为是单对单,所以只支持传入id

第三:获取input的value,需要通过password.value.或者通过callback设置隐藏input的值直接提交表单。

var password = new Text2Password({

id: "password",

callback: function () {

console.log(this.value)

}

});

password.value //

已实现功能:input内容显示为*(目前没设置传参,如果需要直接代码中修改),并且直接通过dom获取也是*,突然感觉信息好像安全了很多。

禁止复制粘贴剪切。

可以在任意位置增删或者选中替换。

end,如果有更好的方法,或者上述代码有bug,请留言一起交流。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。