Остановить заполнение формы LastPass

есть ли способ предотвратить расширение браузера LastPass от заполнения HTML-формы с полем ввода с именем "username"?

это скрытое поле, поэтому я не хочу, чтобы какое-либо программное обеспечение использовало это поле для своих целей:

<input type="text" name="username" id="checkusername" maxlength="9" value="1999" class="longinput" style="display:none">

решение не должно быть похоже на "переименовать поле ввода".

11 ответов


добавлять

data-lpignore="true"

для поля ввода отключен серый LastPass [...] коробка для меня.

источник из LastPass.com


то, что сработало для меня, - это слово "- поиск - " в идентификаторе формы, что-то вроде <form id="affiliate-search-form"> - и lastpass не добавляет свои элементы на входные данные формы. Он работает с чем-то более простым, как <form id="search"> но не работает с <form id="se1rch">


должны быть выполнены два условия:

  1. на форма (Не элемент) должен иметь autocomplete="off" атрибут
  2. Lastpass пользователь должен иметь этот параметр включен:Settings > Advanced > Allow pages to disable autofill

таким образом, это зависит как от пользователя, так и от разработчика.


Если какие-либо разработчики lastpass читают это, пожалуйста, дайте нам атрибут для использования, поэтому нам не нужно прибегать к подобным вещам.

form[autocomplete="off"] input[type="text"] {
    background-position: 150% 50% !important;
}

Я думаю lastpass чтит autocomplete="off" атрибут для входных данных, но я не уверен на 100%.

редактировать Как указывали другие. это работает только в том случае, если пользователь имеет последний проход, настроенный для этого.


для меня работал либо type=search что вроде равно text или через role=note.

вы можете проверить LastPass-JavaScript, но он огромен, может быть, вы можете найти там обходной путь, из того, что я видел, они проверяют только 4 типа ввода, поэтому input type=search было бы одним обходным путем:

!c.form && ("text" == c.type || "password" == c.type || "url" == c.type || "email" == c.type) && lpIsVisible(c))

и это role-ключевые слова, которые они, похоже, игнорируют:

var c = b.getAttribute("role");
switch (c) {
case "navigation":
case "banner":
case "contentinfo":
case "note":
case "search":
case "seealso":
case "columnheader":
case "presentation":
case "toolbar":
case "directory":`

Я проверил LastPass'onloadwff.js, подготовьтесь к 26.960 строкам кода:)


добавить "поиск" для ввода id

<input type="text" name="user" id="user-search"/>

немного поздно на вечеринку, но я только что достиг этого, изменив форму с помощью:

<form autocomplete="off" name="lastpass-disable-search">

Я думаю, что это дураки lastpass, думая, что это форма поиска. Однако это не работает для полей пароля! Lastpass игнорирует поле name в этом случае.

единственный способ, которым мне удалось это сделать, - добавить следующее непосредственно в верхней части формы:

<form autocomplete="off">
    <div id="lp" ><input type="text" /><input type="password" /></div><script type="text/javascript">setTimeout(function(){document.getElementById('lp').style.display = 'none'},75);</script>
</form>

это вызывает неприятное мерцание, но удаляет бессмыслицу автозаполнения-хотя это по-прежнему отображается виджет "создать пароль". LastPass ждет, пока domready, а затем проверяет, есть ли какие-либо видимые поля пароля, поэтому невозможно скрыть или сжать макетные поля выше.


этот код стиля ES6 был полезен для меня, поскольку он добавил data_lpignore для всех моих входных элементов управления:

const elements = document.getElementsByTagName("INPUT");
for (let element of elements) {
    element.setAttribute("data_lpignore", "true");
}

чтобы получить доступ к определенному входному управлению, можно написать что-то вроде этого:

document.getElementById('userInput').setAttribute("data_lpignore", "true");

или, вы можете сделать это название класса:

const elements = document.getElementsByClassName('no-last-pass');
for (let element of elements) {
    element.setAttribute("data_lpignore", "true");
}

попробовал переименовать-search, но по какой-то причине это не сработало. Что сработало для меня, так это следующее:

  1. пометить форму для автозаполнения-autocomplete= "off"
  2. измените тип ввода поля формы на text
  3. добавить новый класс в css для маскировки ввода, имитирует поле пароля
  4. УСБ бит: вход.ряженый { - webkit-текст-безопасность: диск; }

проверено и протестировано в последних версиях FF и Chrome.


ни один из вариантов здесь не помешал LastPass автоматически заполнять мои поля формы, к сожалению. Я взял более кувалдой подход к проблеме и асинхронно установил вход name атрибуты через JavaScript вместо этого. Следующая зависящая от jQuery функция (вызываемая из обработчика событий onsubmit формы) сделала трюк:

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>