Подтвердить что ты не робот

Stop LastPass заполняет форму

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

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

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

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

4b9b3361

Ответ 1

Добавление

data-lpignore="true"

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

Источник: LastPass.com

Ответ 2

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

  • Форма (а не элемент) должна иметь атрибут autocomplete="off"
  • Пользователю Lastpass необходимо включить эту опцию: Settings > Advanced > Allow pages to disable autofill

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

Ответ 3

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

Ответ 4

Я знаю, что опаздываю на вечеринку здесь, но я нашел это, когда пытался остановить провал от разрушения моих форм. @takeshin верен, что автозаполнения недостаточно. Я закончил делать хак ниже, чтобы скрыть символ. Не очень, но я избавился от значка.

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

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

Ответ 5

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

ИЗМЕНИТЬ Как указывали другие. это работает только в том случае, если пользователь имеет последний пропуск, настроенный для этого.

Ответ 6

Для меня работала либо 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 строкам кода:)

Ответ 7

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

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

Ответ 8

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

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

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

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

<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 и затем проверяет, есть ли какие-либо видимые поля пароля, поэтому невозможно скрыть или сжать фиктивные поля выше.

Ответ 9

Этот код стиля ES6 был полезен для меня, так как он добавил data-lpignore ко всем моим элементам управления вводом:

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

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

document.getElementById('userInput').setAttribute("data-lpignore", "true");

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

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

Ответ 10

В последнем выпуске Lastpass с ошибками в октябре 2019 года это простое исправление кажется лучшим.

Добавить

type="search"

на ваш вклад.

Процедура lastpass проверяет атрибут type, чтобы определить, что делать с его автозаполнением, и ничего не делает с этим html5 type "search". Конечно, это слегка взломано, но это изменение в одну строку, которое может быть легко удалено, когда они исправят свой глючный скрипт.

Примечание. После этого ваш браузер может по-разному оформить ваш ввод, используя атрибут type. Если вы наблюдаете это, вы можете предотвратить это, установив свойства CSS для браузера -webkit-appearance и -moz-appearance на 'none' на вашем входе.

Ответ 11

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

  • Отметьте форму для автозаполнения - autocomplete = "off"
  • измените тип ввода поля формы на текст
  • добавить новый класс в ваш css для маскировки ввода, имитирует поле пароля
  • css бит: input.masker { -webkit-text-security: диск; }

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

Ответ 12

Ни одна из опций здесь (автозаполнение, data-lpignore и т.д.), К сожалению, не помешала LastPass автоматически заполнять поля моей формы. Я использовал более кувалдный подход к проблеме и вместо этого установил атрибуты input 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>

Обновление 2019-03-20

Я все еще сталкивался с трудностями с вышесказанным из-за AngularJS в зависимости от полей формы, имеющих атрибуты name, чтобы ngMessages правильно отображал сообщения об ошибках валидации полей.

В конечном счете, единственное решение, которое я смог найти, чтобы запретить LastPass заполнять поля пароля в моей форме смены пароля, было:

  1. Избегайте использования input[type=password] полностью, И
  2. не иметь "пароль" в имени поля

Поскольку в моем случае мне нужно было нормально отправлять форму, я все еще использовал свое оригинальное решение для обновления имен полей "точно в срок". Чтобы избежать использования полей ввода пароля, я обнаружил, что это решение работает очень хорошо.