Жоден із варіантів тут (автозаповнення, дані-lpignore тощо) не заважав LastPass автоматично заповнювати мої поля форми. Я застосував більш глибокий підхід до проблеми і асинхронно встановив вхідні name
атрибути замість JavaScript. Наступна функція, що залежить від jQuery (викликається від форми обробки подання події форми), зробила трюк:
function setInputNames() {
$('#myForm input').each(function(idx, el) {
el = $(el);
if (el.attr('tmp-name')) {
el.attr('name', el.attr('tmp-name'));
}
});
}
$('#myForm').submit(setInputNames);
У формі я просто використав tmp-name
атрибути замість еквівалентних name
атрибутів. Приклад:
<form id="myForm" method="post" action="/someUrl">
<input name="username" type="text">
<input tmp-name="password" type="password">
</form>
Оновити 2019-03-20
Я все ще зіткнувся з труднощами з вищезазначеним через AngularJS залежно від полів форми, що мають name
атрибути для того, щоб ngMessages правильно подав повідомлення про помилки перевірки поля.
Зрештою, єдине рішення, яке я міг знайти, щоб запобігти заповненню LastPass полями паролів у моїй формі зміни пароля:
- Уникайте використання
input[type=password]
повністю І
- щоб у назві поля не було "пароля"
Оскільки в моєму випадку мені потрібно нормально надсилати форму, я все-таки використовував своє оригінальне рішення, щоб оновити назви полів "вчасно". Щоб уникнути використання полів введення пароля, я знайшов, що це рішення спрацювало дуже добре.
type="hidden"
а не заховати його за допомогою CSS