Làm cách nào để kích hoạt Tự động điền trong Google Chrome?


191

Tôi muốn biết nếu có một số loại đánh dấu đặc biệt để bật tính năng tự động điền Chrome cho một hình thức cụ thể. Tôi chỉ tìm thấy câu hỏi về cách vô hiệu hóa nó, nhưng tôi muốn biết liệu tôi có thể thêm một số loại đánh dấu vào mã html để nói với trình duyệt "đây là đầu vào cho địa chỉ" hay "đây là mã ZIP trường "để điền chính xác vào (giả sử người dùng kích hoạt tính năng này).

Câu trả lời:


182

CẬP NHẬT cho năm 2017: Có vẻ như câu trả lời từ Katie có nhiều thông tin cập nhật hơn của tôi. Độc giả tương lai: đưa ra phiếu bầu của bạn cho câu trả lời của cô ấy .

Đây là một câu hỏi tuyệt vời và một trong đó tài liệu rất khó để có được. Trên thực tế, trong nhiều trường hợp, bạn sẽ thấy rằng chức năng Tự động điền của Chrome "chỉ hoạt động". Ví dụ: đoạn mã html sau đây tạo ra một biểu mẫu, ít nhất là đối với tôi (Chrome v. 18), sẽ tự động được điền sau khi nhấp vào trường đầu tiên:

<!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>

Tuy nhiên, câu trả lời này là không thỏa đáng, vì nó để lại giải pháp trong vương quốc của "ma thuật". Tìm hiểu sâu hơn tôi biết rằng Chrome (và các trình duyệt hỗ trợ tự động điền khác) chủ yếu dựa vào các manh mối theo ngữ cảnh để xác định loại dữ liệu cần điền vào các thành phần của biểu mẫu. Ví dụ về các đầu mối theo ngữ cảnh như vậy bao gồm namephần tử đầu vào, văn bản xung quanh phần tử và bất kỳ văn bản giữ chỗ nào.

Tuy nhiên, gần đây, nhóm Chrome đã thừa nhận rằng đây là một giải pháp không thỏa đáng và họ đã bắt đầu bức xúc để chuẩn hóa trong vấn đề này. Một bài viết rất nhiều thông tin từ nhóm Google Webmaster đã thảo luận về vấn đề này, giải thích:

Thật không may, cho đến nay, rất khó để các quản trị web đảm bảo rằng Chrome và các nhà cung cấp điền biểu mẫu khác có thể phân tích chính xác biểu mẫu của họ. Một số tiêu chuẩn tồn tại; nhưng họ đặt gánh nặng lớn lên việc triển khai trang web, vì vậy chúng không được sử dụng nhiều trong thực tế.

("Các tiêu chuẩn" mà họ đề cập đến là một câu gần đây hơn về thông số kỹ thuật được đề cập trong câu trả lời của Avalanchis ở trên.)

Bài đăng trên Google tiếp tục mô tả giải pháp được đề xuất của họ (được đáp ứng bởi những lời chỉ trích quan trọng trong các bình luận của bài đăng). Họ đề xuất sử dụng một thuộc tính mới cho mục đích này:

Chỉ cần thêm một thuộc tính cho thành phần đầu vào, ví dụ: trường địa chỉ email có thể trông như sau:

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

... Nơi x-viết tắt của "thử nghiệm" và sẽ bị xóa nếu & khi điều này trở thành tiêu chuẩn. Đọc bài đăng để biết thêm chi tiết, hoặc nếu bạn muốn tìm hiểu sâu hơn, bạn sẽ tìm thấy một lời giải thích đầy đủ hơn về đề xuất trên wiki whatwg .


CẬP NHẬT: Như đã chỉ ra trong các câu trả lời sâu sắc này , tất cả các biểu thức thông thường mà Chrome sử dụng để xác định / nhận ra các trường phổ biến đều có thể được tìm thấy . Vì vậy, để trả lời câu hỏi ban đầu, chỉ cần đảm bảo tên cho các trường html của bạn được khớp với các biểu thức này. Một số ví dụ bao gồm:autofill_regex_constants.cc.utf8

  • tên đầu tiên: "first.*name|initials|fname|first$"
  • họ "last.*name|lname|surname|last$|secondname|family.*name"
  • e-mail: "e.?mail"
  • địa chỉ (dòng 1): "address.*line|address1|addr1|street"
  • Mã Bưu Chính: "zip|postal|post.*code|pcode|^1z$"

3
Ngoài ra, bạn phải gửi một <form> -Tag hoàn chỉnh với "hành động" và "phương thức"
qualle

Mặc dù điều này có thể được sử dụng có liên quan từ thử nghiệm của tôi, nhưng các phương pháp tôi đã nêu dưới đây thực sự hoạt động.
Mi-chê

Tôi đoán rằng các hằng số regex tự động điền không phải là thứ duy nhất nó sử dụng, nó cũng đang ghi nhớ những thứ từ các đầu vào có tên tùy chỉnh.
MetaGuru

1
Đã sử dụng url trong câu trả lời này và nó đã bị hỏng. Điều này hoạt động ngay bây giờ: code.google.com/p/chromium/codesearch#chromium/src/components/ mẹo
Nathan

2
URL mà @Nathan cung cấp không hoạt động nữa - Đây là URL hiện tại, cho đến khi họ thay đổi lại :) cs.chromium.org/chromium/src/components/autofill/core/common/iêu
HungryBeagle

85

Câu hỏi này khá cũ nhưng tôi có một câu trả lời cập nhật !

Đây là một liên kết đến tài liệu WHATWG để cho phép tự động hoàn tất.

Google đã viết một hướng dẫn khá hay để phát triển các ứng dụng web thân thiện với thiết bị di động. Họ có một phần về cách đặt tên đầu vào trên các biểu mẫu để dễ dàng sử dụng tự động điền. Mặc dù nó được viết cho thiết bị di động, điều này áp dụng cho cả máy tính để bàn và thiết bị di động!

Cách bật AutoComplete trên biểu mẫu HTML của bạn

Dưới đây là một số điểm chính về cách bật tự động hoàn thành:

  • Sử dụng một <label>cho tất cả các <input>lĩnh vực của bạn
  • Thêm một autocompletethuộc tính vào <input>thẻ của bạn và điền nó vào bằng hướng dẫn này .
  • Đặt tên chính xác nameautocompletethuộc tính của bạn cho tất cả <input>các thẻ
  • Ví dụ :

    <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">

Cách đặt tên cho <input>thẻ của bạn

Để kích hoạt tự động hoàn tất, hãy đảm bảo bạn đặt tên chính xác nameautocompletecác thuộc tính trong <input>thẻ của mình . Điều này sẽ tự động cho phép tự động hoàn thành trên các biểu mẫu. Đảm bảo cũng có a <label>! Thông tin này cũng có thể được tìm thấy ở đây .

Đây là cách đặt tên đầu vào của bạn:

  • Tên
    • Sử dụng bất kỳ trong số này cho name:name fname mname lname
    • Sử dụng bất kỳ trong số này cho autocomplete:
      • name (cho tên đầy đủ)
      • given-name (cho tên đầu tiên)
      • additional-name (cho tên đệm)
      • family-name (cho họ)
    • Thí dụ: <input type="text" name="fname" autocomplete="given-name">
  • E-mail
    • Sử dụng bất kỳ trong số này cho name:email
    • Sử dụng bất kỳ trong số này cho autocomplete:email
    • Thí dụ: <input type="text" name="email" autocomplete="email">
  • Địa chỉ
    • Sử dụng bất kỳ trong số này cho name:address city region province state zip zip2 postal country
    • Sử dụng bất kỳ trong số này cho autocomplete:
      • Đối với một địa chỉ đầu vào:
        • street-address
      • Đối với hai đầu vào địa chỉ:
        • address-line1
        • address-line2
      • address-level1 (tiểu bang hoặc tỉnh)
      • address-level2 (thành phố)
      • postal-code (Mã Bưu Chính)
      • country
  • Điện thoại
    • Sử dụng bất kỳ trong số này cho name:phone mobile country-code area-code exchange suffix ext
    • Sử dụng bất kỳ trong số này cho autocomplete:tel
  • Thẻ tín dụng
    • Sử dụng bất kỳ trong số này cho name:ccname cardnumber cvc ccmonth ccyear exp-date card-type
    • Sử dụng bất kỳ trong số này cho autocomplete:
      • cc-name
      • cc-number
      • cc-csc
      • cc-exp-month
      • cc-exp-year
      • cc-exp
      • cc-type
  • Tên người dùng
    • Sử dụng bất kỳ trong số này cho name:username
    • Sử dụng bất kỳ trong số này cho autocomplete:username
  • Mật khẩu
    • Sử dụng bất kỳ trong số này cho name:password
    • Sử dụng bất kỳ trong số này cho autocomplete:
      • current-password (đối với các hình thức đăng nhập)
      • new-password (đối với các hình thức đăng ký và thay đổi mật khẩu)

Tài nguyên


39

Từ thử nghiệm của tôi, x-autocompletethẻ không làm gì cả. Thay vào đó, hãy sử dụng autocompletecác thẻ trên thẻ đầu vào của bạn và đặt giá trị của chúng theo thông số HTML tại đây http://www.whatwg.org/specs/web-apps/civerse-work/multipage/association-of-controls-and-forms. html # tự động điền trường .

Thí dụ:

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

Thẻ biểu mẫu mẹ cần autocomplete = "on" và method = "POST".


2
trong đó trình duyệt này được thực hiện? có kinh nghiệm / bài kiểm tra nào chưa?
staabm

Thông số W3C nói rằng tự động hoàn tất chỉ nên chứaon , offhoặc default. Vì vậy, đây là đánh dấu không hợp lệ và sẽ dễ xảy ra mâu thuẫn. Tôi thực sự nghĩ rằng vị trí trong thuộc tính tự động hoàn thành là không liên quan. Tôi đoán nó xem tất cả các thuộc tính và tự động hoàn thành là một trong những thuộc tính mà nó kiểm tra.
Liam

1
Đây là HTML chính xác, xem thông số WHATWGbài đăng của Google .
AlecRust


4

Tôi chỉ chơi arround với thông số kỹ thuật và có một ví dụ hoạt động tốt - bao gồm một vài lĩnh vực nữa.

<!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>

Mã não

Nó chứa 2 vùng địa chỉ riêng biệt và cũng khác nhau về loại địa chỉ. Đã thử nghiệm nó trên iOS 8.1.0 và dường như nó luôn lấp đầy tất cả các trường cùng một lúc, trong khi địa chỉ tự động chrome trên máy tính để bàn theo địa chỉ.


1
Không chắc chắn tại sao câu trả lời này được downvotes. Ví dụ trên vẫn hoạt động với tôi bằng các trình duyệt được mô tả
staabm 04/07/2015

1
Tự động hoàn tất được hiển thị trong các ví dụ trên là từ đây: html.spec.whatwg.org/multipage/forms.html#autofill
Bryan Rehbein

2

Có vẻ như chúng tôi sẽ kiểm soát nhiều hơn về tính năng tự động điền này, có một API thử nghiệm mới đến với Chrome Canary, có thể được sử dụng để truy cập dữ liệu sau khi hỏi người dùng về tính năng này:

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

thông tin mới của 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


0

Đây là câu trả lời thực sự:

Sự khác biệt duy nhất là trong chính nhãn hiệu này. "Nom" gọi từ "Tên" hoặc "Nome" trong tiếng Bồ Đào Nha.

Vì vậy, đây là những gì bạn cần:

  • Một biểu mẫu bao bọc;
  • Một <label for="id_of_field">Name</label>
  • An <input id="id_of_field"></input>

Chỉ có bấy nhiêu thôi.


tôi cũng đã nhận ra rằng nhãn cũng có thể kích hoạt tự động hoàn thành.
emfi

Vì vậy, quan điểm của bạn là tên nhãn cũng được sử dụng khi làm việc trong các trường tự động hoàn thành? Câu trả lời này không rõ ràng lắm
Liam

Thật ra Nom là từ tiếng Pháp. Nhưng tôi đã làm cho nó hoạt động mà không có Nhãn, giữ chỗ cho đầu vào với giá trị chính xác cũng hoạt động.
AxelH


0

Câu trả lời chỉ có liên kết trở nên vô ích nếu các liên kết này đi xuống, giống như câu hỏi đầu tiên trong câu trả lời đó.
bfontaine

Đúng nhưng đó là lý do tại sao câu trả lời là wiki cộng đồng: để khuyến khích người khác đóng góp cho nó. Ngoài ra, việc hạ thấp wiki cộng đồng không ảnh hưởng đến tác giả, nó chỉ dùng để chôn vùi tài liệu của chính Google. Luôn luôn cảm thấy thoải mái để cập nhật một câu trả lời wiki cộng đồng, đặc biệt nếu đó là một cái gì đó bị cắt và khô như cập nhật một liên kết!
henry

-3

Trong trường hợp của tôi, $('#EmailAddress').attr('autocomplete', 'off');không được làm việc. Nhưng sau đây hoạt động trên phiên bản chrome 67 của jQuery.

$('#EmailAddress').attr('autocomplete', 'new-email');
$('#Password').attr('autocomplete', 'new-password');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.