есть ли w3c действительный способ отключить автозаполнение в форме html?

<p>при использовании типа документа <code>xhtml1-transitional.dtd</code>, собирая номер кредитной карты со следующим html</p><pre><code><input type="text" id="cardnumber" name="cardnumber" autocomplete='off'/> </code></pre><p>отметит предупреждение на валидаторе w3c:</p><blockquote> <p>нет атрибута "автозаполнение".</p> </blockquote><p>существует ли w3c/стандартный способ отключить автозаполнение браузера для чувствительных полей в форме?</p>

<p>я был бы очень удивлен, если бы w3c предложил способ, который будет работать с (x) html4. функция автозаполнения полностью основана на браузере и была представлена в последние годы (задолго до того, как был написан стандарт html4).</p><p>не удивлюсь, если у html5 будет такой.</p><p><em> редактировать: </em> как я и думал, <a href="http://www.w3.org/tr/html5/forms.html#attr-form-autocomplete">html5 <strong> имеет </strong> такую возможность</a> . чтобы определить свою страницу как html5, используйте следующий тип документа (то есть: поместите это как самый первый текст в вашем исходном коде). обратите внимание, что не все браузеры поддерживают этот стандарт, так как он все еще находится в черновом варианте.</p><pre><code><!doctype html> </code></pre>

<p><strong> html 4 </strong>: нет</p><p><strong> html 5 </strong>: да</p><blockquote> <p>атрибут autocomplete является перечисляемым атрибутом. атрибут имеет два состояния. ключевое слово <strong> on </strong> отображается во включенное состояние, а ключевое слово <strong> off </strong> отображается в выключенное состояние. атрибут также может быть опущен. по умолчанию отсутствует значение <strong> on </strong>. состояние <strong> off </strong> указывает на то, что по умолчанию элементам управления формы в форме будет присвоено имя поля автозаполнения <strong> off </strong>; состояние "включено" означает, что по умолчанию для элементов управления формы в поле имени поля <code>autofill</code> установлено значение "on".</p> </blockquote><p>ссылка: <a href="http://www.w3.org/tr/html5/forms.html#attr-form-autocomplete">w</a> </p>

<p>нет, но автозаполнение браузера часто вызывается полем, имеющим тот же атрибут <code>name</code>, что и поля, которые были ранее заполнены. если бы вы могли найти умный способ получить <strong>случайное имя поля</strong>, автозаполнение не сможет получить ранее введенные значения для поля.</p><p>если бы вы дали полю ввода имя типа "<code>email\_<?= randomnumber() ?></code>", а затем получили скрипт, который получает этот цикл данных через переменные post или get, ища что-то, совпадающее с шаблоном "<code>email\_[some number]</code>", вы можете извлечь это выключено, и это будет (практически) гарантировано, <strong>независимо от браузера</strong>.</p>

<p>нет, хорошая статья здесь <strong> <a href="https://wiki.mozilla.org/the\_autocomplete\_attribute\_and\_web\_documents\_using\_xhtml">mozilla wiki</a> </strong>.</p><p>я бы продолжил использовать неверное <code>attribute</code>. я думаю, что именно здесь прагматизм должен победить проверку.</p>

<p>я предлагаю поймать все 4 типа ввода:</p><pre><code>$('form,input,select,textarea').attr("autocomplete", "off"); ссылка:  <a href="http://www.w3.org/submission/web-forms2/#the-autocomplete">http://www.w3.org/submission/web-forms2/#the-autocomplete   <a href="http://dev.w3.org/html5/markup/input.html">http://dev.w3.org/html5/markup/input.html  

если вы используете jquery, вы можете сделать что-то вроде этого:$(document).ready(function(){$("input.autocompleteoff").attr("autocomplete","off");}); и используйте класс autocompleteoff, где вы хотите:<input type="text" name="fieldname" id="fieldid" class="firstcssclass othercssclass autocompleteoff" /> если вы хотите, чтобы все входные данные были autocomplete=off, вы можете просто использовать это:$(document).ready(function(){$("input").attr("autocomplete","off");}); </code></pre>

<p><code>autocomplete="off"</code> это должно исправить проблему для всех современных браузеров.</p><pre><code><form name="form1" id="form1" method="post" autocomplete="off" action="http://www.example.com/form.cgi"> [...] </form> </code></pre><p>в текущих версиях браузеров gecko атрибут autocomplete работает отлично. в более ранних версиях, начиная с netscape 6.2, он работал с исключением форм с "адрес" и "имя".</p><p><strong> update </strong></p><p>в некоторых случаях браузер будет продолжать предлагать значения автозаполнения, даже если атрибут автозаполнения отключен. такое неожиданное поведение может быть довольно загадочным для разработчиков. хитрость для принудительного принудительного запрета автоматического завершения состоит в том, чтобы <strong> присвоить атрибуту случайную строку </strong>, например:</p><pre><code>autocomplete="nope" </code></pre><p>поскольку это случайное значение не является <code>valid one</code>, браузер сдастся.</p><p> <a href="https://developer.mozilla.org/en-us/docs/mozilla/how\_to\_turn\_off\_form\_autocompletion#how\_to\_turn\_off\_the\_autocompletion\_feature">documetation</a> </p>

<p>другой способ - который также поможет с безопасностью - каждый раз, когда вы его отображаете, вызывать поле ввода как-то по-другому: как капту. таким образом, сеанс может читать только одноразовый ввод, и автозаполнению больше нечего делать.</p><p>просто вопрос о том, стоит ли вам вмешиваться в работу браузера: мы разрабатываем системы contact management и crm, и когда вы вводите данные других людей в форму, вы не хотите, чтобы они постоянно предлагали свои данные.</p><p>это работает для наших нужд, но тогда мы можем позволить себе получить хороший браузер :)</p><pre><code>autocomplete='off' </code></pre>

<p>использование случайного атрибута "имя" работает для меня.</p><p>я сбрасываю атрибут имени при отправке формы, чтобы вы могли получить к нему доступ по имени при отправке формы. (используя атрибут id для хранения имени)</p>

<p>обратите внимание, что существует некоторая путаница с расположением атрибута autocomplete. его можно применять либо ко всему тегу form, либо к отдельным тегам input, и это не было действительно стандартизировано до html5 (что явно разрешает <a href="http://www.w3.org/tr/html5/forms.html#the-autocomplete-attribute">оба</a> <a href="http://www.w3.org/tr/html5/forms.html#the-form-element">местоположения</a> ). более старые документы, в частности, это <a href="https://developer.mozilla.org/en-us/docs/mozilla/how\_to\_turn\_off\_form\_autocompletion">статья mozilla</a> упоминает только тег form. в то же время некоторые сканеры безопасности будут искать автозаполнение только в теге input и сообщать, если он отсутствует (даже если он <strong> </strong> в родительской форме). более подробный анализ этого беспорядка размещен здесь: <a href="http://ipsec.pl/node/1089">путаница по поводу атрибутов autocomplete = off в формах html</a> .</p>

<p>не идеально, но вы можете менять идентификатор и имя текстового поля каждый раз, когда вы его визуализируете - вам придется отслеживать его и на стороне сервера, чтобы вы могли получить данные.</p><p>не уверен, сработает ли это или нет, была просто мысль.</p>

<pre><code>if (document.getelementsbytagname) { var inputelements = document.getelementsbytagname("input"); for (i=0; inputelements[i]; i++) { if (inputelements[i].classname && (inputelements[i].classname.indexof("disableautocomplete") != -1)) { inputelements[i].setattribute("autocomplete","off"); } } } </code></pre>