Остановить 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 теперь игнорирует автозаполнение ВКЛ и ВЫКЛ. Я использовал более старые исправления (например, поддельные поля скрытого пароля - которые также больше не работали). Исходя из спецификации уровня жизни - вам нужно вместо этого использовать токены автозаполнения. Вы должны использовать их в соответствующем контексте варианта использования. Надеюсь, это полезно.

https://html.spec.whatwg.org/multipage/forms.html

У меня была похожая проблема. После всех попыток не получилось. Я попробовал этот взлом установки

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-разрядная версия)

Другие вопросы по тегам