Остановить Google Chrome автозаполнения ввода
У меня есть input type text
для пользователя, чтобы изменить свой адрес электронной почты и пароль на странице настройки учетной записи.
Как остановить Chrome автозаполнение ввода.
Хром запомни input data
от входа на страницу и автоматически заполнить страницу настройки учетной записи.
Chrome автозаполнение input
изменить мой адрес электронной почты и пароль на странице настроек учетной записи
14 ответов
Вы явно устанавливаете значения как пустые? Например:
<input type="text" name="textfield" value="">
Это должно помешать браузерам размещать данные там, где они не должны. Кроме того, вы можете добавить атрибут автозаполнения в тег формы:
<form autocomplete="off" ...></form>
Мы больше не зависим от хаков для этого. Вы можете установить автозаполнение на новый пароль, и он будет работать как задумано.
<input type="password" name="pwd" autocomplete="new-password">
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input
Решение 1: Поместить 2 строки кода под <form ..>
тег делает свое дело.
<form id="form1" runat="server" >
<input style="display:none" type="text" name="fakeusernameremembered"/>
<input style="display:none" type="password" name="fakepasswordremembered"/>
...
Решение 2. Он удаляет атрибуты "name" и "id" из элементов и присваивает их обратно через 1 мс. Поместите это в документ, будьте готовы.
$('form[autocomplete="off"] input, input[autocomplete="off"]').each(function () {
var input = this;
var name = $(input).attr('name');
var id = $(input).attr('id');
$(input).removeAttr('name');
$(input).removeAttr('id');
setTimeout(function () {
$(input).attr('name', name);
$(input).attr('id', id);
}, 1);
});
Решение 3: протестировано в Chrome 60.0.3112.101
<input type="password" name="pwd" autocomplete="new-password">
Эта проблема все еще существует в версии 55.0.2883.87 m. (в Windows 10)
Решения, такие как установка атрибута автозаполнения в форме
или добавление ложных полей ввода и удаление атрибута имени перед отправкой больше не работают, поскольку Chrome игнорирует или мгновенно автоматически заполняет их при удалении.
Единственный способ заставить его работать в настоящее время так, как задумано, - установить для атрибута автозаполнения значение "новый пароль".
<input type="text" name="text" autocomplete="new-password">
даже на входах без пароля.
Последняя версия Chrome (46.0.2490.86), похоже, снова изменила поведение. На этот раз AutoFill не имеет ничего общего с autocomplete
или же readonly
или другие обходные пути, предложенные здесь (и в этих отчетах об ошибках https://code.google.com/p/chromium/issues/detail?id=468153, https://bugs.chromium.org/p/chromium/issues/detail?id=587466)
Вместо этого автозаполнение теперь смотрит на метку рядом с полем ввода и генерирует автозаполнение на основе этого (а также идентификатор и имя). Большая подсказка заключается в том, как автозаполнение может заполнять несколько полей одновременно (например, улица, пригород и штат). Похоже, что он использует несколько методов (метка, имя, идентификатор), чтобы различить пространственные отношения между полями.
Поэтому обходной путь - вставить нежелательный текст в метку внутри скрытого диапазона...
S<span style="display:none">_</span>uburb:
... а также запутать / удалить идентификатор и имя. Это было единственное, что помешало мне пригородить автозаполнение.
К несчастью autocomplete="off"
не работал для меня (больше). Итак, вот мое решение:
Сначала прочитайте, а затем удалитеname
" а также "id
"атрибуты от элементов. Затем, после 1 мс, установите эти атрибуты обратно со значениями, прочитанными ранее. Для меня это работает:)
<form autocomplete="off"><br />
<input type="text" name="username" id="username" /><br />
<input type="password" name="password" id="password" /><br />
</form>
<pre>
$('form[autocomplete="off"] input, input[autocomplete="off"]').each(function(){
var input = this;
var name = $(input).attr('name');
var id = $(input).attr('id');
$(input).removeAttr('name');
$(input).removeAttr('id');
setTimeout(function(){
$(input).attr('name', name);
$(input).attr('id', id);
}, 1);
});
</pre>
Устанавливая autocomplete="новый пароль", он работает. Перед тестированием вы сначала очищаете данные браузера
Chrome игнорирует как autocomplete="что-нибудь", так и скрытые поля. Обходной путь HTML/CSS будет использовать поле пароля с абсолютным позиционированием перед реальным:
<input type="text" name="username" required>
<input style="visibility: hidden; position: absolute; left:-99999px" type="password" name="fakepasswordfieldtoturnoffautocomplete">
<input type="password" name="password" required>
РЕДАКТИРОВАТЬ:
Как указано во множестве других ответов в других повторяющихся вопросах, наиболее элегантное рабочее решение на данный момент таково:
<input type="password" readonly onfocus="this.removeAttribute('readonly');"/>
Почти выпрыгнул из окна, пытаясь решить эту проблему... кажется, Google теперь игнорирует автозаполнение ВКЛ и ВЫКЛ. Я использовал более старые исправления (например, поддельные поля скрытого пароля - которые также больше не работали). Исходя из спецификации уровня жизни - вам нужно вместо этого использовать токены автозаполнения. Вы должны использовать их в соответствующем контексте варианта использования. Надеюсь, это полезно.
У меня была похожая проблема. После всех попыток не получилось. Я попробовал этот взлом установки
type = "search"
вместо текста. Даже если это не симпатичный взломать. В большинстве случаев это не вызывает проблем. Тип поиска не отличается от текста на данный момент.
Попробуйте скрытый элемент пароля
<form>
<input type="text" name="fakeusername" class="fake-autofill-fields"/>
<input type="password" name="fakepassword" class="fake-autofill-fields"/>
...
...
</form>
<script>
$(document).ready(function () {
$(".fake-autofill-fields").show();
window.setTimeout(function () {
$(".fake-autofill-fields").hide();
}, 1);
});
</script>
Введите значение ' ' (пустое место) для поля имени пользователя, и Chrome не заполняет автоматически имя пользователя или пароль.
<input type = 'text' value = ' ' name = 'username' />
Если вы когда-нибудь заполняете имя пользователя введенным пользователем значением, введите "", если введенное пользователем значение отсутствует.
Попробуй это:
<div id="form_container">
<input type="text" name="username" autocomplete="off">
<input type="password" name="pwd" autocomplete="off">
<input tytep="submit" name="login" id="login" value="Log In">
</div>`
Код JQuery:
jQuery("#login").click(function(){
jQuery("#form_container").wrap('<form method="post"></form>');
jQuery("form").submit();
});
Если вы не обернете поля ввода в форму, автозаполнение Chrome не будет выполнено.
Когда вы нажимаете на кнопку "Отправить", просто разбейте поля вокруг формы и запустите submit()
на форме.
Это работает:
<form autocomplete="off" ...></form>
Протестировано на Chrome 56.0.2924.87 (64-разрядная версия)