Как запустить автозаполнение в Google Chrome?

Я хотел бы знать, есть ли какая-то специальная разметка для включения функции автозаполнения Chrome для определенной формы. Я только нашел вопросы о том, как отключить его, но я хотел бы знать, могу ли я добавить какую-то разметку в html-код, чтобы сообщить браузеру "это вход для адреса" или "это поле почтового индекса", чтобы правильно заполнить его (предполагается, что пользователь активировал эту функцию).

10 ответов


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

это отличный вопрос, и для которого документация удивительно трудно найти. На самом деле, во многих случаях вы обнаружите, что функция автозаполнения Chrome "просто работает."Например, следующий фрагмент html создает форму, которая, по крайней мере для меня (Chrome V. 18), автоматически заполняется после нажатия в первом поле:

<!DOCTYPE html>
<html>
<body>    
<form method="post">
  First name:<input type="text" name="fname" /><br />
  Last name: <input type="text" name="lname" /><br />
  E-mail: <input type="text" name="email" /><br />
  Phone: <input type="text" name="phone" /><br />
  Address: <input type="text" name="address" /><br />
</form>
</body>
</html>
name входного элемента, текста, окружающего элемент, и любого замещающий текст.

недавно, однако, команда Chrome признала, что это неудовлетворительное решение, и они начали настаивать на стандартизации в этом вопросе. очень информативный пост из группы веб-мастеров Google недавно обсуждали этот вопрос, объясняя:

к сожалению, до сих пор веб-мастерам было трудно обеспечить, чтобы Chrome и другие поставщики заполнения форм могли правильно анализировать свою форму. Некоторые стандарты существуют; но они накладывают тяжелое бремя на реализацию веб-сайта, поэтому они не используются на практике.

("стандарты", на которые они ссылаются, это более недавняя версия спецификации упоминается в ответе Avalanchis выше.)

сообщение Google продолжает описывать предлагаемое ими решение (которое встречает значительную критику в комментариях к сообщению). Они предлагают использовать новый атрибут для этого цель:

просто добавьте атрибут к элементу ввода, например, поле адреса электронной почты может выглядеть так:

<input type=”text” name=”field1” x-autocompletetype=”email” />

...где x- означает "экспериментальный" и будет удален, если & когда это станет стандартом. Читать пост для получения более подробной информации, или если вы хотите копать глубже, вы найдете более полное объяснение предложения на whatwg wiki.


обновление: Как указано в этих глубокий ответы, все регулярные выражения, используемые Chrome для идентификации / распознавания общих полей, можно найти в autofill_regex_constants.cc.utf8. Поэтому, чтобы ответить на исходный вопрос, просто убедитесь, что имена ваших html-полей совпадают с этими выражениями. Некоторые примеры включают:

  • имя: "first.*name|initials|fname|first$"
  • фамилия: "last.*name|lname|surname|last$|secondname|family.*name"
  • электронная почта: "e.?mail"
  • адрес (строка 1): "address.*line|address1|addr1|street"
  • zipcode: "zip|postal|post.*code|pcode|^1z$"

этот вопрос довольно старый, но у меня есть обновленный ответ на 2017!

вот ссылка на документацию WHATWG для включения автозаполнения.

Google написал очень хороший гид для разработки веб-приложений, дружественных для мобильных устройств. У них есть раздел о том, как назвать входные данные в формах, чтобы легко использовать автозаполнение. Eventhough это написано для мобильных устройств, это относится как к настольным и мобильный!

Как включить автозаполнение в HTML-формах

вот некоторые ключевые моменты о том, как включить автозаполнение:

  • использовать <label> для всех <input> поля
  • добавить autocomplete атрибут на <input> теги и заполните его с помощью этого руководство.
  • имя name и autocomplete атрибуты правильно для всех <input> теги
  • пример:

    <label for="frmNameA">Name</label>
    <input type="text" name="name" id="frmNameA"
    placeholder="Full name" required autocomplete="name">
    
    <label for="frmEmailA">Email</label>
    <input type="email" name="email" id="frmEmailA"
    placeholder="name@example.com" required autocomplete="email">
    
    <!-- note that "emailC" will not be autocompleted -->
    <label for="frmEmailC">Confirm Email</label>
    <input type="email" name="emailC" id="frmEmailC"
    placeholder="name@example.com" required autocomplete="email">
    
    <label for="frmPhoneNumA">Phone</label>
    <input type="tel" name="phone" id="frmPhoneNumA"
    placeholder="+1-555-555-1212" required autocomplete="tel">
    

имя <input> теги

для запуска автозаполнения убедитесь, что вы правильно назвали name и autocomplete атрибуты <input> теги. Это автоматически позволит выполнить автозаполнение в формах. Убедитесь, что также есть <label>! Эту информацию также можно найти здесь.

вот как назвать ваши входные данные:

  • имя
    • использовать любой из них для name: name fname mname lname
    • использовать любой из них для autocomplete:
      • name (полное имя)
      • given-name (имя)
      • additional-name (для отчества)
      • family-name (по фамилия)
    • пример: <input type="text" name="fname" autocomplete="given-name">
  • электронная почта
    • использовать любой из них для name: email
    • использовать любой из них для autocomplete: email
    • пример: <input type="text" name="email" autocomplete="email">
  • адрес
    • использовать любой из них для name: address city region province state zip zip2 postal country
    • использовать любой из них для autocomplete:
      • для одного ввода адреса:
        • street-address
      • две адресные входы:
        • address-line1
        • address-line2
      • address-level1 (штат или провинция)
      • address-level2 (город)
      • postal-code (zip код)
      • country
  • телефон
    • используйте любой из них для name: phone mobile country-code area-code exchange suffix ext
    • использовать любой из них для autocomplete: tel
  • Кредитной Карты
    • использовать любой из них для name: ccname cardnumber cvc ccmonth ccyear exp-date card-type
    • использовать любой из них для autocomplete:
      • cc-name
      • cc-number
      • cc-csc
      • cc-exp-month
      • cc-exp-year
      • cc-exp
      • cc-type
  • Логинов
    • использовать любой из них для name: username
    • использовать любой из них для autocomplete: username
  • пароль
    • использовать любой из них для name: password
    • использовать любой из них для autocomplete:
      • current-password (для регистрационных форм)
      • new-password (для форм регистрации и смены пароля)

ресурсы


из моего тестирования,x-autocomplete тег ничего не делает. Вместо этого используйте autocomplete теги на теги input и установите их значения по HTML и спецификации здесь http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#autofill-field .

пример:

<input name="fname" autocomplete="given-name" type="text" placeholder="First Name" required>

тег родительской формы требует автозаполнения= "on"и method="POST".


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

вот спецификация IETF для этого:

http://www.ietf.org/rfc/rfc3106.txt1


Похоже, мы получим больше контроля над этой функцией автозаполнения, в Chrome Canary появится новый экспериментальный API, который можно использовать для доступа к данным после запроса пользователя:

http://www.chromium.org/developers/using-requestautocomplete http://blog.alexmaccaw.com/requestautocomplete

новая информация по в Google:

http://googlewebmastercentral.blogspot.de/2015/03/helping-users-fill-out-online-forms.html

https://developers.google.com/web/fundamentals/input/form/label-and-name-inputs#use-metadata-to-enable-auto-complete


вот настоящий ответ:

единственное различие заключается в самой этикетке. Название" Nom "происходит от" Name "или" Nome " по-португальски.

так вот, что вам нужно:

  • обертка формы;
  • A <label for="id_of_field">Name</label>
  • An <input id="id_of_field"></input>

ничего более.


Я просто играл со спецификацией и получил хороший рабочий пример-включая еще несколько полей.

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>

  <form autocomplete="on" method="POST">

    <fieldset>
        <legend>Ship the blue gift to...</legend>
        <p>
            <label> Firstname:
<input name="fname" autocomplete="section-blue shipping given-name" type="text"  required>
            </label>
      </p>
        <p>
            <label> Lastname:
<input name="fname" autocomplete="section-blue shipping family-name" type="text" required>
            </label>
      </p>

        <p>
            <label> Address: <input name=ba
                autocomplete="section-blue shipping street-address">
            </label>


      </p>
        <p>
            <label> City: <input name=bc
                autocomplete="section-blue shipping address-level2">
            </label>

      </p>
        <p>
            <label> Postal Code: <input name=bp
                autocomplete="section-blue shipping postal-code">
            </label>
      </p>

    </fieldset>
    <fieldset>
        <legend>Ship the red gift to...</legend>
        <p>
            <label> Firstname:
<input name="fname" autocomplete="section-red shipping given-name" type="text" required>
            </label>
      </p>

        <p>
            <label> Lastname:
<input name="fname" autocomplete="section-red shipping family-name" type="text" required>
            </label>
      </p>
        <p>
            <label> Address: <input name=ra
                autocomplete="section-red shipping street-address">
            </label>
      </p>


        <p>
            <label> City: <input name=bc
                autocomplete="section-red shipping address-level2">
            </label>

      </p>

        <p>
            <label> Postal Code: <input name=rp
                autocomplete="section-red shipping postal-code">
            </label>
      </p>

    </fieldset>

        <fieldset>
        <legend>payment address</legend>
        <p>
            <label> Firstname:
<input name="fname" autocomplete="billing given-name" type="text" required>
            </label>
      </p>

        <p>
            <label> Lastname:
<input name="fname" autocomplete="billing family-name" type="text" required>
            </label>
      </p>
        <p>
            <label> Address: <input name=ra
                autocomplete="billing street-address">
            </label>
      </p>


        <p>
            <label> City: <input name=bc
                autocomplete="billing address-level2">
            </label>

      </p>

        <p>
            <label> Postal Code: <input name=rp
                autocomplete="billing postal-code">
            </label>
      </p>

    </fieldset>
    <input type="submit" />
</form>

</body>
</html>

JSBIN

Он содержит 2 отдельных адресных области, а также различные типы адресов. Протестировал его также на iOS 8.1.0 и кажется, что он всегда заполняет все поля сразу, в то время как рабочий стол chrome автозаполняет адрес по адресу.



в моем случае, $('#EmailAddress').attr('autocomplete', 'off'); не работал. Но следующие работы на chrome версии 67 от jQuery.

$('#EmailAddress').attr('autocomplete', 'new-email');
$('#Password').attr('autocomplete', 'new-password');

вот новый список автозаполнения Google "имена". Есть все поддерживаемые имена на любом разрешенном языке.

autofill_regex_constants.cc