Отключить автозаполнение Firefox - PullRequest
20 голосов
/ 27 июня 2011

Можно ли отключить функцию автозаполнения в Firefox без отключения автозаполнения?

Я знаю, что могу сделать это:

autocomplete="off"

Но я не хочу отключать автозаполнение, просто автозаполнение.

Firefox заполняет некоторые из наших скрытых полей, которые должны быть пустыми

Это в основном проблема, когда пользователь обновляет страницу. Поля формы повторно заполняются значениями из предварительного обновления. Примером того, чтобы быть проблемой, является заполнитель старой школы. Где мы заполняем поле значением и удаляем его при отправке. Значение обновляется при обновлении, и мы не знаем, является ли это заполнителем или значением использования.

Ответы [ 11 ]

9 голосов
/ 23 августа 2016

Поместив два фиктивных поля между полем действительного имени пользователя и полем действительного пароля, например:

<input name = "Username" type="text" autocomplete="off">
<input name = "DummyUsername" type="text" style="display:none;">
<input name = "DummyPassword" type="password" style="display:none;">
<input name = "Password" type="password" autocomplete="new-password">

Это предотвратило как автоматическое заполнение имени пользователя, так и автозаполнение пароля.

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

7 голосов
/ 09 июля 2011

Если проблема заключается в том, что FF заполняет поля при обновлении пользователя, это на самом деле особенность Firefox, чтобы попытаться помочь пользователю в случае случайного обновления, чтобы они не потеряли то, что набрали.Я не думаю, что вы можете переопределить это с HTML.Вы можете использовать JavaScript для очистки / сброса всех соответствующих значений формы при загрузке страницы.Если form.reset () в форме не работает, вам придется перебирать элементы формы и очищать их следующим образом:

for (i = 0; i < frm_elements.length; i++)
{
    field_type = frm_elements[i].type.toLowerCase();
    switch (field_type)
    {
    case "text":
    case "password":
    case "textarea":
    case "hidden":
        frm_elements[i].value = "";
        break;
    case "radio":
    case "checkbox":
        if (frm_elements[i].checked)
        {
            frm_elements[i].checked = false;
        }
        break;
    case "select-one":
    case "select-multi":
        frm_elements[i].selectedIndex = -1;
        break;
    default:
        break;
    }
}
3 голосов
/ 24 июня 2014

У меня была похожая проблема для поля пароля в форме на странице.

Если на странице есть тег ввода с типом = пароль, то Firefox просто автоматически заполняетпароль:

<form>
    <input type='password' />
</form>

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

$('input[type=password]').val('')
3 голосов
/ 27 июня 2011

Firefox учитывает только autocomplete="off" в форме, а не отдельные элементы (в отличие от IE).

Другой вариант - изменить имена полей на странные вещи, такие как name="_u_sern_ame", чтобы сбить с толку любые системы распознавания полей, если выхочу отключить автозаполнение чьих-то подробностей.

2 голосов
/ 09 апреля 2012

У меня была эта проблема сама. Ответ Майка близок, но, на мой взгляд, не идеален: он очищает элементы, даже если атрибут value может захотеть установить его.

На странице загрузки я делаю следующее. Он использует только немного jQuery.

// Reset input elements to their HTML attributes (value, checked)
$("input").each(function(){
    // match checkbox and radiobox checked state with the attribute
    if((this.getAttribute('checked')==null) == this.checked)
        this.checked = !this.checked;
    // reset value for anything else
    else this.value = this.getAttribute('value')||'';
});

// Select the option that is set by the HTML attribute (selected)
$("select").each(function(){
    var opts = $("option",this), selected = 0;
    for(var i=0; i<opts.length; i++) 
        if(opts[i].getAttribute('selected')!==null) 
            selected = i;

    this.selectedIndex = selected||0;
}); 


Нет jQuery?

Используйте document.getElementsByTagName, чтобы выбрать input s и select s, затем выполните итерацию по ним и замените this на повторяющийся элемент.
Выберите опции с помощью .getElementsByTagName('option').

1 голос
/ 23 июля 2017

В некоторых случаях браузер будет предлагать значения автозаполнения, даже если атрибут автозаполнения отключен.Такое неожиданное поведение может быть довольно загадочным для разработчиков.Хитрость в том, чтобы по-настоящему форсировать отсутствие автозаполнения, заключается в присвоении атрибуту случайной строки, например:

autocomplete="nope"

https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion

Пробовал в основных браузерах, и это работает!

1 голос
/ 03 октября 2016

Это на самом деле работает с полем пароля в FireFox:

$(window).load(function(){
    $('#pass').val('');
});
1 голос
/ 31 мая 2016

autocomplete='off' не помешает ни в вводе, ни в форме положить

<input type='password' style='display: none;' />

до ввода вашего реального пароля.

1 голос
/ 06 июля 2011

Этот пост предлагает использовать (другие) пустые поля, которые будут заполняться автоматически, вы можете скрыть поля с помощью css.Но это, вероятно, будет работать лучше с полями пароля, чем другие.

0 голосов
/ 31 декабря 2016

у меня получилось

autocomplete="new-password"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...