จะเรียกการป้อนอัตโนมัติใน Google Chrome ได้อย่างไร


191

ฉันต้องการทราบว่ามีมาร์กอัปชนิดพิเศษเพื่อเปิดใช้งานคุณลักษณะป้อนอัตโนมัติของ Chrome สำหรับแบบฟอร์มเฉพาะหรือไม่ ฉันเพิ่งพบคำถามเกี่ยวกับวิธีปิดการใช้งาน แต่ฉันต้องการทราบว่าฉันสามารถเพิ่มมาร์กอัปบางประเภทในรหัส html เพื่อบอกเบราว์เซอร์ "นี่คืออินพุตสำหรับที่อยู่" หรือ "นี่คือรหัสไปรษณีย์ ฟิลด์ "เพื่อกรอกข้อมูลให้ถูกต้อง (ถือว่าผู้ใช้เปิดใช้งานคุณสมบัตินี้)

คำตอบ:


182

อัปเดตสำหรับปี 2017: ดูเหมือนว่าคำตอบจาก Katie จะมีข้อมูลที่ทันสมัยกว่าของฉัน ผู้อ่านในอนาคต: ให้คะแนนโหวตของคุณกับคำตอบของเธอคำตอบของเธอ

นี่เป็นคำถามที่ยอดเยี่ยมและเป็นเรื่องที่ยากที่จะเข้าใจเอกสาร ที่จริงแล้วในหลายกรณีคุณจะพบว่าฟังก์ชันการป้อนอัตโนมัติของ 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>

อย่างไรก็ตามคำตอบนี้ไม่เป็นที่น่าพอใจเนื่องจากมันทิ้งคำตอบไว้ในขอบเขตของ "เวทมนตร์" การขุดลึกฉันได้เรียนรู้ว่า Chrome (และเบราว์เซอร์ที่เปิดใช้งานการป้อนอัตโนมัติอื่น ๆ ) ส่วนใหญ่อาศัยเบาะแสบริบทเพื่อกำหนดประเภทของข้อมูลที่ควรกรอกลงในองค์ประกอบของฟอร์ม ตัวอย่างของปมบริบทดังกล่าวรวมถึงnameองค์ประกอบของการป้อนข้อความข้อความโดยรอบองค์ประกอบและข้อความตัวยึดใด ๆ

อย่างไรก็ตามเมื่อเร็ว ๆ นี้ทีม Chrome ยอมรับว่านี่เป็นวิธีที่ไม่น่าพอใจและพวกเขาได้เริ่มกดเพื่อสร้างมาตรฐานในเรื่องนี้ โพสต์ที่ให้ข้อมูลมากจากกลุ่มผู้ดูแลเว็บของ Google เมื่อเร็ว ๆ นี้ได้กล่าวถึงปัญหานี้โดยอธิบาย:

น่าเสียดายที่ตอนนี้เป็นเรื่องยากสำหรับผู้ดูแลเว็บที่จะให้แน่ใจว่า Chrome และผู้ให้บริการกรอกแบบฟอร์มอื่น ๆ สามารถแยกวิเคราะห์ฟอร์มได้อย่างถูกต้อง มีมาตรฐานอยู่บ้าง แต่พวกเขาใช้ภาระที่หนักหน่วงในการติดตั้งเว็บไซต์ดังนั้นพวกเขาจึงไม่ค่อยได้ใช้ประโยชน์เท่าไหร่

("มาตรฐาน" ที่พวกเขาอ้างถึงเป็นverion ล่าสุดของข้อกำหนดที่ระบุไว้ในคำตอบของ Avalanchis ด้านบน)

โพสต์ของ Google ดำเนินการต่อเพื่ออธิบายวิธีแก้ปัญหาที่เสนอ (ซึ่งพบได้จากการวิจารณ์ที่สำคัญในความคิดเห็นของโพสต์) พวกเขาเสนอให้ใช้คุณลักษณะใหม่เพื่อจุดประสงค์นี้:

เพียงเพิ่มแอตทริบิวต์ให้กับองค์ประกอบอินพุตตัวอย่างเช่นฟิลด์ที่อยู่อีเมลอาจมีลักษณะดังนี้:

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

... โดยที่x-หมายถึง "ทดลอง" และจะถูกลบหาก & เมื่อสิ่งนี้กลายเป็นมาตรฐาน อ่านโพสต์รายละเอียดเพิ่มเติมหรือถ้าคุณต้องการที่จะขุดลึกคุณจะหาคำอธิบายที่สมบูรณ์มากขึ้นของข้อเสนอในวิกิพีเดีย WHATWG


UPDATE: เป็นแหลมออกในสิ่งเหล่านี้ที่ชาญฉลาด คำตอบที่นิพจน์ทั่วไปทั้งหมดที่ 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"
  • รหัสไปรษณีย์: "zip|postal|post.*code|pcode|^1z$"

3
นอกจากนี้คุณยังมีการส่งสมบูรณ์ <form> a -Tag ด้วย "การกระทำ" และ "วิธีการ"
qualle

ในขณะนี้อาจเคยมีความเกี่ยวข้องจากการทดสอบของฉันเท่านั้นวิธีการที่ฉันได้อธิบายไว้ด้านล่างใช้งานได้จริง
คาห์

ฉันคาดเดาว่าค่าคงที่ regex ของการป้อนอัตโนมัติไม่ใช่สิ่งเดียวที่ใช้ แต่เป็นการจดจำสิ่งต่าง ๆ จากอินพุตที่มีชื่อแบบกำหนดเองเช่นกัน
MetaGuru

1
ใช้ url ในคำตอบนี้แล้วมันก็พัง ตอนนี้ใช้งานได้แล้ว: code.google.com/p/chromium/codesearch#chromium/src/components/…
นาธาน

2
URL ที่ @Nathan ที่ให้ไว้ไม่ทำงานอีกต่อไป - นี่คือ URL ปัจจุบันจนกว่าพวกเขาจะเปลี่ยนอีกครั้ง :) cs.chromium.org/chromium/src/components/autofill/core/common/ …
HungryBeagle

85

คำถามนี้ค่อนข้างเก่า แต่ฉันมีคำตอบที่อัพเดตแล้ว !

นี่คือลิงค์ไปยังเอกสาร WHATWG สำหรับการเปิดใช้งานการเติมข้อความอัตโนมัติ

Google เขียนคำแนะนำที่ดีสำหรับการพัฒนาเว็บแอปพลิเคชันที่เป็นมิตรกับอุปกรณ์พกพา พวกเขามีส่วนเกี่ยวกับวิธีตั้งชื่ออินพุตในแบบฟอร์มเพื่อใช้การป้อนอัตโนมัติได้อย่างง่ายดาย แม้ว่ามันจะถูกเขียนขึ้นสำหรับมือถือมันใช้ได้ทั้งบนเดสก์ท็อปและมือถือ!

วิธีเปิดใช้งานการทำให้สมบูรณ์อัตโนมัติในแบบฟอร์ม 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 (รหัสไปรษณีย์)
      • 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 (สำหรับฟอร์มการสมัครใช้งานและการเปลี่ยนรหัสผ่าน)

ทรัพยากร


39

จากการทดสอบของฉันx-autocompleteแท็กไม่ทำอะไรเลย แทนที่จะใช้autocompleteแท็กบนแท็กอินพุตของคุณและตั้งค่าตามข้อกำหนด HTML ที่นี่http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms HTML

ตัวอย่าง:

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

แท็กแบบฟอร์มหลักต้องการ autocomplete = "on" และ method = "POST"


2
ข้อมูลจำเพาะนี้ใช้กับเบราว์เซอร์ใด มีประสบการณ์ / การทดสอบใดบ้าง
staabm

W3C สเปคระบุว่าการเติมข้อความอัตโนมัติควรมีเพียง on , หรือoff defaultดังนั้นนี่คือเครื่องหมายที่ไม่ถูกต้องและมีแนวโน้มที่จะไม่สอดคล้องกัน ฉันคิดว่าตำแหน่งในแอตทริบิวต์เติมข้อความอัตโนมัตินั้นไม่เกี่ยวข้อง ฉันเดาว่ามันจะดูที่คุณลักษณะทั้งหมดและการเติมข้อความอัตโนมัติเกิดขึ้นเป็นหนึ่งในคุณสมบัติที่ตรวจสอบ
เลียม

1
นี่คือ HTML ที่ถูกต้องดูWHATWG ข้อมูลจำเพาะและGoogle โพสต์
AlecRust

5

คุณต้องตั้งชื่อองค์ประกอบอย่างเหมาะสมเพื่อที่เบราว์เซอร์จะป้อนอัตโนมัติ

นี่คือข้อมูลจำเพาะของ IETF สำหรับสิ่งนี้:

http://www.ietf.org/rfc/rfc3106.txt 1


4

ฉันเพิ่งเล่นกับสเป็คและได้รับตัวอย่างการทำงานที่ดี - รวมถึงเขตข้อมูลอีกไม่กี่

<!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 เติมที่อยู่ตามที่อยู่


1
ไม่แน่ใจว่าทำไมคำตอบนี้จึงลดลง ตัวอย่างข้างต้นยังใช้งานได้สำหรับฉันโดยใช้เบราว์เซอร์ที่อธิบายไว้
staabm

1
การเติมข้อความอัตโนมัติที่แสดงในตัวอย่างข้างต้นมาจากที่นี่: html.spec.whatwg.org/multipage/forms.html#autofill
Bryan Rehbein

2

ดูเหมือนว่าเราจะได้รับการควบคุมเพิ่มเติมเกี่ยวกับคุณลักษณะป้อนอัตโนมัตินี้มี API ทดลองใหม่ที่มาถึง Chrome Canary ซึ่งสามารถใช้ในการเข้าถึงข้อมูลหลังจากขอให้ผู้ใช้:

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


0

นี่คือคำตอบที่แท้จริง:

ข้อแตกต่างอยู่ในฉลากเท่านั้น "Nom" มาจาก "ชื่อ" หรือ "Nome" ในภาษาโปรตุเกส

ดังนั้นนี่คือสิ่งที่คุณต้องการ:

  • กระดาษห่อแบบฟอร์ม;
  • <label for="id_of_field">Name</label>
  • <input id="id_of_field"></input>

ไม่มีอะไรเพิ่มเติม


ฉันก็คิดออกเช่นกันว่าฉลากยังสามารถกระตุ้นการเติมข้อความอัตโนมัติของ Chromes ได้
emfi

ดังนั้นประเด็นของคุณคือชื่อป้ายกำกับนั้นยังใช้เมื่อทำงานกับฟิลด์กรอกข้อมูลอัตโนมัติ? คำตอบนี้ไม่ชัดเจน
Liam

อันที่จริง Nom มาจากภาษาฝรั่งเศส แต่ฉันทำให้มันทำงานโดยไม่มี Label ตัวยึดตำแหน่งสำหรับอินพุตด้วยค่าที่ถูกต้องเช่นกัน
AxelH

0

นี่คือรายการใหม่ของ "ป้อนชื่ออัตโนมัติ" ของ Google มีชื่อที่รองรับทั้งหมดในภาษาที่ได้รับอนุญาตใด ๆ

autofill_regex_constants.cc


0

คำตอบที่มีลิงก์เพียงอย่างเดียวจะไม่ช่วยเหลือหากลิงก์เหล่านี้ลงไปเช่นเดียวกับคำตอบแรกในคำตอบนั้น
bfontaine

จริง แต่นั่นคือเหตุผลที่คำตอบคือวิกิชุมชน: เพื่อสนับสนุนให้ผู้อื่นมีส่วนร่วม นอกจากนี้การลดระดับวิกิของชุมชนไม่ส่งผลกระทบต่อผู้แต่ง แต่จะทำหน้าที่ฝังเอกสารของ Google เท่านั้น โปรดอัปเดตคำตอบของวิกิชุมชนเสมอโดยเฉพาะอย่างยิ่งถ้ามันเป็นเรื่องที่น่าเบื่อและแห้งเหมือนการอัปเดตลิงก์!
เฮนรี่

-3

ในกรณีของฉัน$('#EmailAddress').attr('autocomplete', 'off');ไม่ทำงาน แต่การติดตามใน chrome รุ่น 67 โดย jQuery

$('#EmailAddress').attr('autocomplete', 'new-email');
$('#Password').attr('autocomplete', 'new-password');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.