我知道您可以通过在表单上设置autocomplete="off"
来禁用表单上的自动填充功能。
我遇到的问题是,我想阻止浏览器填充密码字段但不想禁用用户名或其他字段。
要考虑的另一件事是遗留数据。在表单上使用autocomplete="off"
(甚至是字段本身)不会阻止已保存密码的现有用户获得免费通行证。或者使用Web检查器,更改自动完成和提交的值,允许自己保存密码。
我知道可以在每次访问时将密码字段name
属性更改为随机/新属性。遗憾的是,我正在使用java / spring后端,并且我被告知如果没有巨大的重构/覆盖,这是不容易管理的。
你会如何设计这个?您如何强制该字段始终为空?浏览器没有一致的方法让事件通过密码管理器通知您预先填充 - 有些可能触发onChange,其他可能不会。
我想我可以使用javascript移动字段并动态构建真实表单并提交但是再一次,这将影响Spring安全性和验证等。还有其他想法吗?
答案 0 :(得分:0)
你可以在调用onFocus时将变量设置为true(如userFocus) 并在onChange attribut上,但是如果userFocus == false,则将“value”重置为NULL的简短代码)类似于过度使用imo但是迁移工作
修改强>
function reset()
{
if (document.getElementById("hidden").value!=" ")
{
document.getElementById("demo").value=" ";
}
else;
}
function getfocus()
{
document.getElementById("hidden").value=" ";
}
else;
}
<input type="password" id="pwd" onchange="reset()" onfocus="getfocus()"/>
<input type="hidden" id="hidden" value="not focus"/>
答案 1 :(得分:0)
我必须为IE 11找到这个解决方案(因为它忽略了自动完成属性)。它在其他浏览器中工作正常。真的更像一个工作,但它的工作原理。 https://stackoverflow.com/a/20809203/1248536
答案 2 :(得分:0)
我最近遇到了这个问题,并且没有简单的解决方案,因为我的字段可以预先填充,我想通过在准备好的事件中设置密码类型来分享我提出的优雅黑客。
创建时不要将输入字段声明为类型密码,而是添加一个就绪事件监听器以便为您添加:
function createSecretTextInput(name,parent){
var createInput = document.createElement("input");
createInput.setAttribute('name', name);
createInput.setAttribute('class', 'secretText');
createInput.setAttribute('id', name+'SecretText');
createInput.setAttribute('value', 'test1234');
if(parent==null)
document.body.appendChild(createInput);
else
document.getElementById(parent).appendChild(createInput);
$(function(){
document.getElementById(name+'SecretText').setAttribute('type', 'password');
});
};
createSecretTextInput('name', null);