Як відключити браузер Автозаповнення в полі веб-форми / тегу введення?


2789

Як відключити autocompleteосновні веб-переглядачі для певного input(або form field)?


2
У деяких системах, де тестерам доводиться вручну вводити багато інформації знову і знову, може бути корисним параметр як налаштований, щоб під час тестування ви можете його відключити і просто натиснути «вкладка> стрілка вниз> вкладка> стрілка вниз тощо. . '
Simon_Weaver

Відповіді:


2623

Firefox 30 ігнорує autocomplete="off"паролі, вибираючи запит користувача на те, чи слід зберігати пароль на клієнті. Зверніть увагу на наступний коментар від 5 травня 2014 року:

  • Менеджер паролів завжди запитує, чи хоче він зберегти пароль. Паролі не зберігаються без дозволу користувача.
  • Ми третій браузер, який впровадив цю зміну після IE та Chrome.

Згідно з документацією Mozilla Developer Network , атрибут Boolean form element autocompleteне дозволяє кешувати дані форми у старих браузерах.

<input type="text" name="foo" autocomplete="off" />

45
Це не спрацювало для мене у Firefox 3.0.3. Атрибут автозаповнення повинен був бути поставлений у ФОРМУ, а не в INPUT.
Вінстон Фассетт

17
Автозаповнення визначено лише у стандартах HTML 5, тож воно порушить будь-які перевірки, які ви запускаєте проти HTML 4. * ...
Jrgns

96
@Winston, ви повинні розмістити його як на формі, так і на самому вхідному елементі. Таким чином ви покриєте всю нестандартність браузерів.
AviD

83
І не забудьте вимкнути автоматичне завершення = на розширення (якщо ви використовуєте Chrome), перш ніж протестувати веб-сторінку. Інакше ти будеш відчувати себе справді нерозумно, як я. ;)
Джо Лісс


314

Крім того autocomplete=off, ви також можете мати імена полів форми рандомізованих кодом, який генерує сторінку, можливо, додавши до кінця імен певний рядок, характерний для сеансу.

Після подання форми ви можете зняти її, перш ніж обробляти їх на стороні сервера. Це заважає веб-браузеру знаходити контекст для вашого поля, а також може запобігти атакам XSRF, оскільки зловмисник не зможе відгадати назви полів для подання форми.


10
Це набагато краще рішення порівняно з використанням autocomplete = "off". Все, що вам потрібно зробити, - створити нове ім’я на кожному завантаженні сторінки та зберегти це ім’я в $ _SESSION для подальшого використання:$_SESSION['codefield_name'] = md5(uniqid('auth', true));
чарійте

78
Ні, це не є кращим рішенням, оскільки джерелом переваг цього параметра є агент користувача, також відомий як веб-браузер. Існує відмінність між підтримкою певної поведінки (яку намагається зробити HTML 5) та змушуючи її приймати рішення, від імені користувача, яке, на вашу думку, є "набагато кращим рішенням".
amn

15
Це рішення може працювати з усіма браузерами, тому в цьому відношенні це "краще". І все-таки, amn вірна, рішення про відключення автозаповнення від імені користувачів не є гарною ідеєю. Це означає, що я б відключив автозаповнення лише в дуже конкретних ситуаціях, наприклад, коли ви плануєте створити власну функцію автозаповнення і не хочете конфліктів чи дивної поведінки.
macguru2000

8
Що стосується атак XSRF, я не впевнений, який тип атаки ви зображали, але чи не міг зловмисник просто зняти кінцеву частину так само, як ви робите серверну сторону для визначення полів? Або якщо зловмисник публікує поля, чи не могли вони додати свій власний випадковий рядок, оскільки його буде знято сервером?
xr280xr

9
@ macguru2000 створення власного автозаповнення - це повністю законний і звичайний випадок використання. Дійсно, браузер повинен полегшити розробникам вимкнення автоматичного заповнення, коли їм потрібно, а не змушувати нас використовувати такі хаки
whoadave

235

Більшість основних браузерів та менеджерів паролів (правильно, IMHO) зараз ігнорують autocomplete=off.

Чому? Багато банків та інші веб-сайти "з високою безпекою" додають autocomplete=offна свої сторінки входу "з метою безпеки", але це фактично знижує безпеку, оскільки змушує людей змінювати паролі на цих сайтах із високою безпекою, щоб їх легко запам’ятати (і, таким чином, зламати), оскільки автозаповнення було зламано.

Здавна більшість менеджерів паролів почали ігнорувати autocomplete=off, і тепер браузери починають робити те саме для введення імені користувача / пароля.

На жаль, помилки в реалізаціях автозаповнення вставляють інформацію про ім’я користувача та / або пароль у невідповідні поля форми, викликаючи помилки перевірки форми, або ще гірше, випадково вставляючи імена користувачів у поля, які навмисно залишені користувачем.

Що робити веб-розробникам?

  • Якщо ви можете залишити всі поля паролів на сторінці самостійно, це чудовий початок, оскільки, здається, наявність поля пароля є головним пусковим механізмом для заповнення користувача / проходу автозаповнення. В іншому випадку, прочитайте поради нижче.
  • Safari зазначає, що є 2 поля паролів, і в цьому випадку відключає автоматичне заповнення, припускаючи, що це повинна бути форма пароля, а не форма входу. Тому просто не забудьте використати 2 поля паролів (нові та підтвердити нові) для будь-яких форм, де ви дозволяєте
  • На жаль, Chrome 34 намагатиметься автоматично заповнювати поля користувачем / пропускати кожен раз, коли побачить поле пароля. Це досить погана помилка, що, сподіваємось, вони змінять поведінку Safari. Однак додавання цього у верхній частині форми, здається, відключає автоматичне заповнення пароля:

    <input type="text" style="display:none">
    <input type="password" style="display:none">

Я ще не досліджував IE або Firefox ретельно, але буду радий оновити відповідь, якщо інші мають інформацію в коментарях.


5
що ви маєте на увазі під "додаванням цього на вашу сторінку, здається, вимкнення автоматичного заповнення сторінки:"
wutzebaer

5
@wutzebaer, Chrome помічає приховане поле пароля і зупиняє автоматичне заповнення. Повідомляється, що це запобігає крадіжці інформації про пароль, не помічаючи користувача.
David W

6
Ваш фрагмент коду запобігає автоматичному заповненню полів для входу в Chrome, Firefox, IE 8 та IE 10. Не перевіряв IE 11. Хороший матеріал! Тільки проста відповідь, яка все ще працює.
Сем Уоткінс

3
Здається, ваша примітка сафарі також працює на Chrome, принаймні станом на грудень 2015 року. У реєстраційній формі у мене було поле для імені користувача та пароля, яке автоматично доповнювало дані з форми реєстрації. Створення двох type='password'полів на одній сторінці призвело до ігнорування автозаповнення браузера "збереження пароля", що спричинило ціле навантаження, оскільки реєстраційні форми, як правило, запитують пароль двічі, коли форми для входу запитують його лише один раз.
Метт Флетчер

3
Схоже, більше не працює в Chrome 55, якщо додаткове поле пароля не приховано, що перемагає мету.
jokkedk

160

Іноді навіть автозаповнення = викл б не допустити , щоб заповнити облікові дані в неправильних полях, але не є користувачем або поле нік.

Це вирішення є доповненням до публікації apinstein про поведінку браузера.

виправити автозаповнення браузера в режимі лише для читання та встановити фокус, що можна записати (натискання та вкладка)

 <input type="password" readonly  
     onfocus="this.removeAttribute('readonly');"/>

Оновлення: мобільний Safari встановлює курсор у полі, але не показує віртуальну клавіатуру. New Fix працює як раніше, але обробляє віртуальну клавіатуру:

<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
    this.removeAttribute('readonly');
    // fix for mobile safari to show virtual keyboard
    this.blur();    this.focus();  }" />

Демо-версія https://jsfiddle.net/danielsuess/n0scguv6/

// UpdateEnd

Тому що браузер автоматично заповнює облікові дані в неправильному текстовому полі !?

Я помічаю цю дивну поведінку на Chrome і Safari, коли поля паролів є в тому самому вигляді. Я думаю, браузер шукає поле для пароля, щоб вставити збережені облікові дані. Тоді воно автоматично заповнює (лише здогадуючись завдяки спостереженню) найближче текстове поле для введення тексту, яке з’являється перед полем пароля в DOM. Оскільки веб-переглядач - це останній екземпляр, і ви не можете ним керувати,

Це виправлення лише для читання вище працювало для мене.


8
Якщо немає JavaScript, то вся форма виходить з ладу. -1
Джиммі Кейн

8
@JimmyKane ключовим було б також додати атрибут в першу чергу за допомогою javascript (що Dsuess тут не робив, а просто додав для повноти).
trnelson

@tmelson Я розумію, але все ж навіщо використовувати js навіть для відключення? Не давайте js для речей, які можна вдосконалити на самому собі. Хоча я знову з вами згоден.
Джиммі Кейн

3
Це не працює правильно в IE8, поле для повторного введення пароля не можна редагувати під час першого фокусування, лише після того, як ви знову відфокусуєтесь та сфокусувались. Хороша ідея, але, на жаль, вона занадто гакітна і не безпечна у використанні.
Сем Уоткінс

Це працює не в усіх браузерах (наприклад, IE 11 і IE Edge). Як тільки readonlyвилучено, наступний вибір поля призводить до повернення автозаповнення.
Пройшов кодування

106
<form name="form1" id="form1" method="post" 
      autocomplete="off" action="http://www.example.com/form.cgi">

Це буде працювати в Internet Explorer і Mozilla FireFox, недоліком є ​​те, що це не стандарт XHTML.


Я помітив, що додавання його до елемента форми не завжди перешкоджає застосуванню його до окремих вхідних даних у формі. Тому, мабуть, найкраще розмістити його безпосередньо на вхідному елементі.
sholsinger

15
Насправді @sholsinger, найкраще розміщувати це як на формі, так і на самому вхідному елементі. Таким чином ви покриєте всю нестандартність браузерів.
AviD

2
На жаль, Microsoft IE 11 вже не поважає цього input type="password". Сподіваємось, жоден інший браузер не вирішить видалити цю функціональність.
SamHuckaby

Налаштування autocomplete="off"на formєдине, що працювало для Chrome.
Андрій

106

Рішення для Chrome - додати autocomplete="new-password"пароль до типу введення. Перевірте наведений нижче приклад.

Приклад:

<form name="myForm"" method="post">
   <input name="user" type="text" />
   <input name="pass" type="password" autocomplete="new-password" />
   <input type="submit">
</form>

Chrome завжди автоматично заповнює дані, якщо знаходить поле типу пароля , достатньо лише вказати для цього поля autocomplete = "new-password".

Це добре працює для мене.

Примітка: переконайтесь, F12що ваші зміни набувають чинності, багато разів браузери зберігають сторінку в кеші, це створило на мене погане враження, що вона не працює, але браузер насправді не приніс зміни.


2
Це працює в Chrome і для інших типів полів, а не просто вводити = "пароль".
Джейк

Я використовував його з паролем, електронною поштою та типами тексту, і він працював. Я використовував це просто так: autocomplete = "new"
Crak_mboutin

autocomplete = "nope" name = "pswd" та використовується <input name = "dummyPassword" type = "password" style = "display: none;"> перед полем для введення реального пароля. Це працювало для мене.
Denuka


Зараз це працює майже в усіх браузерах, а не лише в Chrome: автозаповнення # сумісності браузера .
Ендрю Мортон

60

Як говорили інші, відповідь така autocomplete="off"

Однак я вважаю, що варто уточнити, чому корисно використовувати це в певних випадках, оскільки деякі відповіді на це та дублюючі запитання підказують, що краще не вимикати його.

Зупинення браузерів, що зберігають номери кредитних карток, не слід залишати користувачам. Занадто багато користувачів навіть не усвідомлюють, що це проблема.

Особливо важливо вимкнути його на полях для кодів безпеки кредитної картки. Як зазначено на цій сторінці :

"Ніколи не зберігайте код безпеки ... його значення залежить від презумпції, що єдиним способом його надання є зчитування його з фізичної кредитної картки, що підтверджує, що особа, яка її постачає, насправді тримає картку".

Проблема полягає в тому, що якщо це загальнодоступний комп'ютер (кібер-кафе, бібліотека тощо), то іншим користувачам легко вкрасти дані вашої картки, і навіть на вашій власній машині шкідливий веб-сайт може вкрасти дані про автозаповнення .


7
якби я зайшов на сайт, і він запам'ятав мою карту в спадному меню, я був би дуже нещасний. я починаю цікавитись, як вони можуть бути такими недбалими.
Simon_Weaver

8
Набагато простіший / критичніший випадок. Коли я відвідую сторінку користувача на частині адміністратора свого сайту, він намагається встановити ім’я користувача та пароль, щоб вони були моїми адміністраторськими ім’ями та паролем, не можу сказати, що це не форма входу. Я хочу, щоб мій пароль адміністратора запам'ятався, але критичною помилкою є те, що він намагається застосувати запам'ятоване ім’я користувача / пароль до будь-яких користувачів, яких я потім редагую.
rjmunro

34

Я вирішив нескінченну боротьбу з Google Chrome із використанням випадкових символів. Коли ви завжди візуалізуєте автозаповнення випадковим рядком, він ніколи нічого не запам’ятає.

<input name="name" type="text" autocomplete="rutjfkde">

Сподіваємось, що це допоможе іншим людям.


2
Це працює навіть краще. Ви можете додати невеликий JS, який генерує випадковий код для кожного завантаження сторінки, і додати цей код у поле введення: <code> функція autoId () {var autoId = ""; var dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; для (var i = 0; i <12; i ++) {autoId + = dict.charAt (Math.floor (Math.random () * dict.length)); } повернути autoId; } $ ('. autocompleteoff'). attr ('autocomplete', autoId ()); </code> Ви можете додати autocompleteoffклас до потрібного поля введення.
Рагурам Касьяп

не працює в моїй хромованій версії 68.0.3440.106 (Офіційна збірка) (64-розрядна)
Sukanya Purushothaman

Chrome виправлено, щоб тепер використовувати стандартизований режим "вимкнено"
MacK

1
На жаль, це працює краще, ніж те, що називається стандартом хрому
Nour Lababidi

1
Сьогодні я виявив, що Chrome замінить випадковий рядок з "Off". Я не можу повірити, що розробники Chrome роблять цей атрибут погано і неконтрольовано. Чому ой мій.
крок

33

Мені потрібно просити відрізнятись від тих відповідей, які говорять, щоб уникнути відключення автоматичного завершення.

Перше, що потрібно зробити, - це те, що автоматичне завершення, яке не є явно відключеним у полях форми входу, - це помилка PCI-DSS. Крім того, якщо локальна машина користувачів порушена, зловмисник може отримати тривіальну інформацію про автоматичне заповнення даних, оскільки вони зберігаються у відкритому доступі.

Безумовно, є аргумент щодо зручності використання, проте існує дуже тонкий баланс, коли мова йде про те, у яких полях форм має бути вимкнено автозаповнення, а в якому - не.


Щойно я помітив, що IE не запускає події onChange, коли ви заповнюєте текст, використовуючи функцію автозаповнення. У нас є десятки форм і понад тисяча подій onChange (перевірки вводу, ділова логіка), розпорошених по всьому. Нещодавно ми оновили IE до новішої версії, і раптом почали відбуватися дивні речі. На щастя, ми запускаємо додаток для інтрамережі, і автоматичне заповнення не є проблемою для UX, простіше просто вимкнути його.
Роботрон

3
Якщо локальна машина користувачів порушена, вони прикручуються, відкладаються. У ньому може бути встановлений кейлоггер, у нього може бути доданий підроблений корінний сертифікат SSL і все, що надсилається через помилковий проксі і т.д. цей користувач мій ім’я користувача та пароль адміністратора. Мені потрібно запобігти такій поведінці.
rjmunro

1
Продавці браузерів, схоже, доглядають за своїми інтересами. Збережені паролі = вхід користувача. І автоматичне заповнення / вимкнення було занадто простим - чому б не складний стандарт семантичних підказок ( html.spec.whatwg.org/multipage/… ), який, до речі, дозволяє браузеру збирати цінні семантичні дані з сайтів кожен відвідування користувачів?
aro_tech

конкретний випадок використання, який я намагаюся вирішити, такий: вони вже ввійшли в систему, але тепер вони збираються отримати доступ до чогось ще більш чутливого. Я хочу показати діалог, який змушує їх повторно засвідчити автентичність, проти можливості того, що вони пішли закурити, а погана людина сіла на своє крісло. спробували кілька методів перемогти автозавершення, і нічого не працює. Тепер я думаю, може, принаймні, використовувати старий добрий 'password = window.prompt ("Будь ласка, введіть свій пароль") плюс ім'я користувача в сеансі, і спробуйте це підтвердити.
Девід

31

Три варіанти: Перший:

<input type='text' autocomplete='off' />

Друге:

<form action='' autocomplete='off'>

Третє (javascript-код):

$('input').attr('autocomplete', 'off');

2
Перший та другий варіанти мають бути одним із варіантів, оскільки він залежить від того, як браузери справляються з цим.
rybo111

Спробував $ formElement.attr ('автозавершення', 'вимкнено'); і це не працює.
Бен Сінклер

22

На спорідненій чи насправді, на абсолютно протилежній ноті -

"Якщо ви користувач вищезазначеної форми і хочете знову активувати функцію автозаповнення, використовуйте закладку" запам'ятати пароль "на цій сторінці закладок . Це видаляє всі autocomplete="off"атрибути з усіх форм на сторінці. Продовжуйте боротися з хорошою боротьбою! "


20

Ми фактично використовували sasb для одного сайту. Це був веб-додаток з медичним програмним забезпеченням для управління лікарем. Однак багато наших клієнтів були хірургами, які використовували безліч різних робочих станцій, включаючи напівдержавні термінали. Отже, вони хотіли переконатися, що лікар, який не розуміє наслідків автоматично збережених паролів або не звертає уваги, не зможе випадково залишити свою інформацію про вхід легко доступною. Звичайно, це було до того, як ідея приватного перегляду, яка починає з'являтися в IE8, FF3.1 тощо. Навіть так, багато лікарів змушені користуватися старими шкільними браузерами в лікарнях з ІТ, які не зміниться.

Отже, нам довелося генерувати випадкові імена полів, які працювали б лише для цієї публікації. Так, це менш зручно, але це просто ударить користувача над головою про те, щоб не зберігати інформацію про вхід на громадських терміналах.


20

Жодне з рішень не працювало для мене в цій розмові.

Нарешті я з’ясував чисте HTML-рішення, яке не потребує Javascript , працює в сучасних браузерах (крім IE; там потрібно було хоча б 1 лов, так?), І не вимагає відключення автозаповнення для всієї форми.

Просто вимкніть автозаповнення на, formа потім увімкніть його для роботи, яку inputви хочете працювати у формі. Наприклад:

<form autocomplete="off">
    <!-- these inputs will not allow autocomplete and chrome 
         won't highlight them yellow! -->
    <input name="username"  />
    <input name="password" type="password" />
    <!-- this field will allow autocomplete to work even 
         though we've disabled it on the form -->
    <input name="another_field" autocomplete="on" />
</form>

Це було абсолютно те, що я шукав!
Марко

20

Просто встановити autocomplete="off". Для цього є дуже вагома причина: Ви хочете забезпечити власну функцію автозаповнення!


20

Я намагався нескінченних рішень, а потім знайшов таке:

Замість autocomplete="off"просто використовуватиautocomplete="false"

Так просто, і це працює як шарм і в Google Chrome!


Як ви сказали в хромі, значення вимкнення не працює. Це повинно бути "помилковим"
azuax

Для мене працює на Chrome 44.0.2403.130.
GuiGS

1
Спробував це: $ formElement.attr ('autocomplete', 'false'); вибачте не працює.
Бен Сінклер

20

Це працює для мене.

<input name="pass" type="password" autocomplete="new-password" />

Ми також можемо використовувати цю стратегію в інших елементах управління, таких як текст, вибір тощо


це має бути остання відповідь. Єдина відповідь, яка працює для мене в останньому хромі,
Нік Чан Абдулла

19

Я думаю, autocomplete=offце підтримується в HTML 5.

Запитайте себе, чому ви хочете зробити це, хоча - це може мати сенс у деяких ситуаціях, але не робіть цього лише заради цього.

Це менш зручно для користувачів і навіть не має проблеми з безпекою в OS X (згадана Сореном нижче). Якщо ви турбуєтесь про те, щоб люди вкрали віддалені паролі - реєстратор натискань на клавіші все одно може це зробити, навіть якщо ваша програма використовує autcomplete=off.

Оскільки користувач, який вирішив, щоб браузер пам’ятав (більшість) моєї інформації, я вважаю, що це дратує, якщо ваш сайт не пам’ятав мою.


17

Окрім

autocomplete="off"

Використовуйте

readonly onfocus="this.removeAttribute('readonly');"

для входів , які ви не хочете , щоб вони пам'ятали дані форми ( username, passwordі т.д.) , як показано нижче:

<input type="text" name="UserName" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

<input type="password" name="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

Сподіваюсь, це допомагає.


1
Для мене в IE11 я не можу набрати текстове поле навіть після того, як onfocus видалить атрибут readonly. Однак якщо я натискаю другий раз на текстове поле, я можу набрати текст.
mcallahan

Я зіткнувся з тією ж проблемою з IE11 (не можу набрати до другого фокусу). Додавання розмиття та фокусування знову працює. $(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
пальмі

@Andrew Звичайно, ти можеш. Це основний принцип, щоб подолати цю проблему, і я також додав оновлення, що містить приклад повного коду;)
Murat Yıldız

Я також додавonfocusout="this.setAttribute('readonly', 'readonly');"
rinatdobr

16

Найкраще рішення:

Запобігайте автозаповненню імені користувача (або електронної пошти) та пароля:

<input type="email" name="email"><!-- Can be type="text" -->
<input type="password" name="password" autocomplete="new-password">

Запобігати автозаповненню поля:

<input type="text" name="field" autocomplete="nope">

Пояснення: autocompleteпродовження роботи в <input>, autocomplete="off"не працює, але ви можете змінити offна випадковий рядок, наприклад nope.

Працює в:

  • Хром: 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 і 64

  • Firefox: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 і 58


2
Я виявив, що це працює під час мого попереднього тестування. Так дивно, що "вимкнено" не працює.
Крейг Джейкобс

Це не працює для Chrome на Android. Я спробував встановити рядкові значення для autocompleteатрибута, і він все ще відображає попередні записи як пропозиції автозаповнення під вводом.
tebs1200

@ tebs1200 Який? Поле пароля чи текстове поле?
Кава

@Cava вибачте за затримку відповіді. Текстове поле. Не має значення, яке значення я встановив autocomplete, я все одно отримую пропозицію на основі раніше введених значень. Це добре на робочому столі, але не на Android Chrome.
tebs1200

14

Трохи пізно в грі ... але я просто зіткнувся з цією проблемою і випробував кілька відмов, але ця працює для мене, знайдена на MDN

У деяких випадках браузер продовжує запропонувати значення автозаповнення, навіть якщо атрибут автозаповнення встановлено на вимкнено. Така несподівана поведінка може бути досить спантеличною для розробників. Трюк, щоб дійсно змусити незавершення, - присвоїти атрибуту випадковий рядок так:

autocomplete="nope"

13

Додавання

autocomplete="off"

до тегу форми вимкне браузер автозаповнення (те, що раніше було введено в це поле) з усіх inputполів у цій конкретній формі.

Тестовано на:

  • Firefox 3.5, 4 BETA
  • Internet Explorer 8
  • Хром

13

Додавання autocomplete="off"не збирається скорочувати.

Змініть атрибут типу введення на type="search".
Google не застосовує автоматичне заповнення до даних із типом пошуку.


4
Це злом. Поле не є полем пошуку. Надалі це може спричинити неприємності.
Roel

12

Використовуйте нестандартне ім’я та ідентифікатор для полів, тож замість "name" є "name_". Потім браузери не бачать це полем імені. Найкраще в тому, що ви можете зробити це для деяких, але не для всіх полів, і вони заповнять деякі, але не всі поля.


Проблема з цим полягає в тому, якщо будь-які інші сайти використовують "name_" для досягнення тієї ж мети, то ви повернетесь до прямої.
ConroyP

3
тому зробіть це "mysite_name". Якщо хтось іншим цим користується, я б поставив їм питання ...
Стів Перкс

це заплутало деякі з цих автоматичних програм для заселення
Simon_Weaver

12

Щоб уникнути недійсного XHTML, ви можете встановити цей атрибут за допомогою javascript. Приклад за допомогою jQuery:

<input type="text" class="noAutoComplete" ... />

$(function() {
    $('.noAutoComplete').attr('autocomplete', 'off');
});

Проблема полягає в тому, що користувачі без JavaScript отримають функцію автозаповнення.


38
це не уникає недійсного xhtml, він просто додає недійсний біт динамічно після того, як ви перевірили його, він оголосив його дійсним!
Andiih

@Andiih: Так чи є спосіб зробити автоматичне завершення роботи в xhtml?
cherouvim

1
Робота (або припинення її роботи, яка є метою): так, як зазначено вище. Але дійсні - ні.
Андііх

11

спробуйте також, якщо це просто autocomplete="off"не працює:

autocorrect="off" autocapitalize="off" autocomplete="off"

11

Я не можу повірити, що це питання залишається настільки довгим після його повідомлення. Вищезазначені рішення для мене не спрацювали, оскільки сафарі, здавалося, знає, коли елемент не відображається чи не відображається на екрані, однак для мене спрацювало наступне:

<div style="height:0px; overflow:hidden; ">
  Username <input type="text" name="fake_safari_username" >
  Password <input type="password" name="fake_safari_password">
</div>

Сподіваюся, що комусь корисно!


1
Отже, ставлячи це перед фактично працюючими полями імені користувача та паролем? браузер заповнив ті, а не справжні
Андрій

11

Так ось це:

function turnOnPasswordStyle() {
  $('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">


1
Дуже добре, якщо текстові поля стилю запобігають спалаху видимого пароля.
Андрій

1
Велике спасибі, це зробило завдання +1, моєю варіацією вашого рішення було зробити його одним рядком: <input oninput = "this.type = 'password'" id = "inputpassword" type = "text">
Hasnaa Ibraheem

@HasnaaIbraheem Дякую (: іноді краще читати - краще.
Став Бодік,

11

Це проблема безпеки, яку браузери зараз ігнорують. Браузери ідентифікують та зберігають вміст, використовуючи вхідні імена, навіть якщо розробники вважають, що інформація є чутливою і не повинна зберігатися. Якщо ім'я вводу відрізняється від двох запитів, це вирішить проблему (але вона все одно буде збережена в кеші браузера, а також збільшить кеш браузера). Попросити користувача активувати або відключити параметри в налаштуваннях свого браузера - це не дуже вдале рішення. Проблема може бути виправлена ​​в бекенде.

Ось моє виправлення. Підхід, який я реалізував у своїх рамках. Усі елементи автозаповнення генеруються приховано таким чином:

<? $r = rmd5(rand().mocrotime(TRUE)); ?>
<form method="POST" action="./">
    <input type="text" name="<? echo $r; ?>" />
    <input type="hidden" name="__autocomplete_fix_<? echo $r; ?>" value="username" />
    <input type="submit" name="submit" value="submit" />
</form>

Потім сервер обробляє такі змінні публікації:

foreach ($_POST as $key => $val)
{
    if(preg_match('#^__autocomplete_fix_#', $key) === 1){
        $n = substr($key, 19);
        if(isset($_POST[$n]))$_POST[$val] = $_POST[$n];
    }
}

Доступ до цього значення можна отримати як завжди

var_dump($_POST['username']);

І браузер не зможе запропонувати інформацію з попереднього запиту чи від попередніх користувачів.

Все працює як шарм, навіть якщо оновлення веб-переглядачів хочуть ігнорувати автозаповнення чи ні. Це було найкращим способом вирішити проблему для мене.


10

Жоден із згаданих тут хаків не працював для мене в Chrome. Тут обговорюється це питання: https://code.google.com/p/chromium/isissue/detail?id=468153#c41

Додавання цього <form>твору (принаймні поки що):

<div style="display: none;">
    <input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>

1
Зауважте, що використовуючи цю техніку, FireFox все ще автоматично заповнить приховане поле, яке буде включено при надсиланні форми. Це, ймовірно, буде погано, оскільки потім пароль буде передано через потенційно незахищене з'єднання. На щастя, додавання maxlength="0"не дозволяє Firefox автоматично заповнювати поле.
Mikal Schacht Jensen

9

Ви можете використовувати для введення.

Наприклад;

<input type=text name="test" autocomplete="off" />
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.