Отключить автозаполнение Firefox
Можно ли отключить функцию автозаполнения Firefox Firefox без отключения автозаполнения?
Я знаю, что могу это сделать:
autocomplete="off"
Но я не хочу отключать автозаполнение, просто автозаполнение.
Firefox заполняет некоторые наши скрытые поля, которые должны быть пустыми
В основном это проблема, когда пользователь обновляет страницу. Поля формы повторно заполняются значениями от предварительного обновления. Примером этого является проблема, стоящая на месте старой школы. Где мы заполняем поле значением и удаляем его при отправке. Значение повторно заполняется при обновлении, и мы не знаем, является ли это владельцем места или значением использования.
Ответы
Ответ 1
Если проблема заключается в том, что FF заполняет поля, когда пользователь обновляется, на самом деле это функция Firefox, которая пытается помочь пользователю в случае случайного обновления, чтобы они не теряли все, что они набрали. Я не думаю, что вы можете переопределить это с помощью HTML. Вы можете использовать JavaScript для очистки / reset всех соответствующих значений формы при загрузке страницы. Если 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;
}
}
Ответ 2
У меня была аналогичная проблема для поля пароля в форме на странице.
Если есть тег ввода с типом = пароль в теге формы на странице, Firefox просто автоматически заполняет пароль:
<form>
<input type='password' />
</form>
Вот код, который я использовал для исправления этой конкретной проблемы:
$('input[type=password]').val('')
Ответ 3
Поместите два фиктивных поля между фактическим полем имени пользователя и фактическим полем пароля для меня, например:
<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 = "new-password", по-видимому, не полностью реализован, но может помочь с некоторыми браузерами. Я сомневаюсь, что это было полезно с FireFox, но оно есть для будущих версий, если эта функция будет более широко принята.
Ответ 4
Firefox только чтит autocomplete="off"
в форме, а не отдельные элементы (в отличие от IE).
Другой вариант - изменить имена полей на такие странные вещи, как name="_u_sern_ame"
, чтобы запутать любые системы распознавания на местах, если вы хотите отключить автозаполнение некоторых деталей.
Ответ 5
У меня была эта проблема. На мой взгляд, ответ Майка близок, но не идеален: он опустошает элементы, даже если атрибут value
может захотеть его установить.
В pageload я делаю следующее. Он использует только немного 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
и select
s, затем перейдите по ним и замените this
на итерированный элемент.
Выберите параметры с помощью .getElementsByTagName('option')
.
Ответ 6
В этом сообщении предлагается использовать (другие) фиктивные поля, которые будут автозаполнены, вы можете скрыть их с помощью css. Но это, вероятно, будет лучше работать с полями пароля, чем другие.
Ответ 7
autocomplete='off'
не будет препятствовать вводу или в форме
положите
<input type='password' style='display: none;' />
перед входом в настоящий пароль.
Ответ 8
Это действительно работает с полем пароля в FireFox:
$(window).load(function(){
$('#pass').val('');
});
Ответ 9
Если это действительно ошибка Firefox, вы можете использовать событие onSubmit, чтобы очистить скрытые поля. В виде кода:
<form onSubmit="clearFieldsIfPopulated(this)">
<input type="hidden" name="field1"> <input type="submit">
</form>
Пример функции Javascript:
function clearFieldsIfPopulated(form) {
if (form.field1.value != "") {
form.field1.value == "";
}
}
Ответ 10
что сработало для меня,
autocomplete="new-password"
Ответ 11
В некоторых случаях браузер будет продолжать предлагать значения автозаполнения, даже если атрибут автозаполнения отключен. Это неожиданное поведение может быть довольно загадочным для разработчиков. Трюк, который действительно заставляет no-autocompletion - назначить случайную строку атрибуту, например:
autocomplete="nope"
https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
Пробовал в основных браузерах, и он работает!