ปิดใช้งานการป้อนอัตโนมัติของ Chrome


620

ฉันพบปัญหาเกี่ยวกับพฤติกรรมการป้อนอัตโนมัติของ Chrome ในหลายรูปแบบ

เขตข้อมูลในแบบฟอร์มทั้งหมดมีชื่อทั่วไปและถูกต้องมากเช่น "อีเมล", "ชื่อ" หรือ "รหัสผ่าน" และพวกเขายังได้autocomplete="off"ตั้งค่า

การตั้งค่าการเติมข้อความอัตโนมัติได้ปิดการใช้งานการเติมข้อความอัตโนมัติเรียบร้อยแล้วโดยที่ค่าแบบเลื่อนลงปรากฏขึ้นเมื่อคุณเริ่มพิมพ์ แต่ไม่ได้เปลี่ยนค่าที่ Chrome เติมข้อมูลในฟิลด์โดยอัตโนมัติ

พฤติกรรมนี้จะโอเคยกเว้นว่า Chrome กำลังเติมอินพุตที่ไม่ถูกต้องตัวอย่างเช่นการเติมอินพุตโทรศัพท์ด้วยที่อยู่อีเมล ลูกค้าได้ร้องเรียนเกี่ยวกับเรื่องนี้ดังนั้นจึงได้รับการยืนยันว่าเกิดขึ้นในหลายกรณีและไม่ใช่ผลลัพธ์บางอย่างสำหรับสิ่งที่ฉันทำในเครื่องของฉัน

ทางออกเดียวในปัจจุบันที่ฉันนึกได้คือการสร้างชื่ออินพุตแบบกำหนดเองแบบไดนามิกจากนั้นแยกค่าบนแบ็กเอนด์ มีแท็กหรือนิสัยใจคอที่เปลี่ยนพฤติกรรมการป้อนอัตโนมัติที่สามารถใช้แก้ไขปัญหานี้ได้หรือไม่?


6
มันไม่ซ้ำกัน นี้จับปิดการใช้งานป้อนอัตโนมัติที่หนึ่งจับจัดแต่งทรงผมสีป้อนอัตโนมัติ ...
Nicu Surdu

17
autocomplete = "false" แทน autocomplete = "off" ตามคำตอบของ Kaszoni Ferencz แล้วโหวตให้คนอื่น
roughcoder

7
ดูจำนวนคำตอบสำหรับคำถามนี้ - ควรบอกคุณบางอย่าง: คุณกำลังต่อสู้กับการต่อสู้ที่แพ้ นี่ไม่ใช่ปัญหาของ Chrome อีกต่อไป Firefox และอื่น ๆ ได้ถูกติดตามแล้ว ชอบหรือไม่คุณจะต้องยอมรับการตัดสินใจของอุตสาหกรรมเบราว์เซอร์ที่กรอกแบบฟอร์มอัตโนมัติเป็นตัวเลือกของผู้ใช้ - คุณสามารถต่อสู้กับพวกเขา แต่คุณจะแพ้ ในตอนท้ายของวันคำถามที่คุณควรถามไม่ใช่ฉันจะล้มล้างการทำให้สมบูรณ์อัตโนมัติได้อย่างไร แต่ฉันจะสร้างฟอร์มที่ทำงานได้ดีกับการเติมอัตโนมัติได้อย่างไร ความกังวลของคุณเกี่ยวกับความปลอดภัยไม่ใช่ของคุณที่ต้องกังวล แต่เป็นเรื่องของผู้ใช้
mindplay.dk

21
ขออภัยการตอบกลับของ @ mindplay.dk นั้นมีประสิทธิภาพ สถานการณ์ของฉันคือฉันมีผู้ใช้ที่ได้เข้าสู่เว็บไซต์ของฉันและหน้าบนเว็บไซต์มีไว้สำหรับพวกเขาเพื่อป้อนข้อมูลบัญชี / pwd สำหรับระบบอื่น ๆ เมื่อฉันใส่ diaog เพื่อให้พวกเขาป้อนใหม่ข้อมูลการเข้าสู่ระบบของพวกเขาสำหรับเว็บไซต์ของฉันได้รับการกรอกซึ่งผิดอย่างสมบูรณ์และจะทำให้เกิดปัญหาหาก / เมื่อผู้ใช้ป้อนข้อมูลนั้นโดยไม่ตั้งใจทั้งสองไม่มีอะไรเกี่ยวข้อง ซึ่งกันและกัน ในกรณีนี้เบราว์เซอร์กำลังทำสิ่งที่ตรงกันข้ามกับสิ่งที่ผู้ใช้ต้องการ
Mike K

8
@ mindplay.dk - เว็บแอปพลิเคชันของฉันเป็นแอปพลิเคชันการจัดการเวิร์กโฟลว์สำหรับที่ทำงานดังนั้นไม่ความกังวลเกี่ยวกับความปลอดภัยเป็นเรื่องที่ต้องคำนึงถึงซึ่งได้รับคำสั่งจากผู้บริหารระดับสูงและต้องปฏิบัติตามโดยพนักงานทุกคน " อย่างไรก็ตามการขอให้พวกเขาตั้งค่า Chrome, IE หรือเบราว์เซอร์อื่น ๆ ของตัวเองกำลังจะทำให้ช่องว่างในกระบวนการรับรองความถูกต้องเนื่องจากพวกเขาสามารถทำได้โดยเจตนาหรือไม่ปิดท้ายการใช้การป้อนอัตโนมัติ ไม่ว่าเว็บแอปพลิเคชันทั้งหมดจะเป็นประเภทเดียวกันโดยมีผู้ใช้หรือข้อกังวลเหมือนกัน
PoloHoleSet

คำตอบ:


906

สำหรับ Chrome เวอร์ชันใหม่คุณสามารถใส่autocomplete="new-password"รหัสผ่านลงในช่องได้เลย ฉันตรวจสอบแล้วทำงานได้ดี

มีเคล็ดลับจากนักพัฒนา Chrome ในการสนทนานี้: https://bugs.chromium.org/p/chromium/issues/detail?id=370363#c7

PS โปรดทราบว่า Chrome จะพยายามสรุปพฤติกรรมการป้อนอัตโนมัติจากชื่อรหัสและเนื้อหาข้อความใด ๆ ที่สามารถรับได้รอบ ๆ ฟิลด์รวมถึงป้ายกำกับและโหนดข้อความโดยพลการ หากมีโทเค็นการเติมข้อความอัตโนมัติเหมือนstreet-addressในบริบท Chrome จะป้อนอัตโนมัติดังกล่าว ฮิวริสติกอาจสร้างความสับสนได้เนื่องจากบางครั้งก็เรียกเฉพาะเมื่อมีเขตข้อมูลเพิ่มเติมในแบบฟอร์มหรือไม่หากมีเขตข้อมูลน้อยเกินไปในแบบฟอร์ม โปรดทราบด้วยว่าautocomplete="no"จะใช้งานได้ แต่autocomplete="off"จะไม่ใช้เพื่อเหตุผลทางประวัติศาสตร์ autocomplete="no"คุณกำลังบอกเบราว์เซอร์ว่าฟิลด์นี้ควรมีการเติมให้อัตโนมัติโดยอัตโนมัติเป็นฟิลด์ที่เรียกว่า"no"คือคุณบอกเบราว์เซอร์ที่ข้อมูลนี้ควรจะอัตโนมัติเสร็จเป็นเขตที่เรียกว่าหากคุณสร้างautocompleteชื่อสุ่มที่ไม่ซ้ำกันคุณปิดการใช้งานอัตโนมัติสมบูรณ์

หากผู้ใช้ของคุณได้เข้าชมในรูปแบบที่เลวร้ายข้อมูลป้อนอัตโนมัติของพวกเขาอาจจะเสียหาย ให้พวกเขาเข้าไปด้วยตนเองและแก้ไขข้อมูลป้อนอัตโนมัติใน Chrome อาจเป็นการดำเนินการที่จำเป็นจากพวกเขา


115
'รหัสผ่านใหม่' ทำงานสำหรับฉันหลังจากลอง 'ปิด' และ 'เท็จ'
Kevin

26
นี่เป็นเพียงการแก้ไขที่ใช้งานได้ในตอนนี้ เท็จและปิดไม่ทำงานอีกต่อไป ควรเป็นคำตอบที่ถูกต้องตอนนี้
David

5
เหตุผลที่งานนี้เป็นเพราะทีมงานโครเมี่ยมกำลังพยายามที่จะสร้างมูลค่าการเติมข้อความอัตโนมัติแนะนำดังแสดง @ developers.google.com/web/fundamentals/design-and-ui/input/... "ใหม่รหัสผ่าน" ค่าเป็นหนึ่งใน มีจำนวนน้อยที่มีตรรกะเพิ่มเติมโดยรอบและในกรณีนี้มันจะระงับการป้อนอัตโนมัติ แต่ยังคงอนุญาตให้ใช้คำแนะนำการเติมข้อความอัตโนมัติ
Deminetix

30
ไม่ทำงานตั้งแต่วันที่ 1.13.2018 เวอร์ชัน 63.0.3239.132 (รุ่นเป็นทางการ) (64 บิต)
PellucidWombat

36
ฉันแค่อยากจะบอก .. หลังจากสะดุดกับปัญหานี้แล้ว Chrome เป็นงานที่แท้จริง ดังนั้นตอนนี้เราต้องกระโดดผ่านห่วงเพื่อปิดการใช้งานฟังก์ชั่นที่ควรจะเป็นตัวเลือก ในโลกที่ต้องการป้อนอัตโนมัติจะต้องใช้ในการสมัครทางธุรกิจที่อยู่ใหม่ / แตกต่างกันทุกครั้ง Google เริ่มแย่เหมือน Microsoft
Eddy Howard

700

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

โซลูชั่นเก่า

เพียงแค่ใช้<form autocomplete="off">และจะป้องกันการใส่รหัสผ่านล่วงหน้ารวมถึงการกรอกข้อมูลตามประเภทของฟิลด์ตามสมมติฐานที่เบราว์เซอร์อาจทำ (ซึ่งมักจะผิด) เมื่อเทียบกับการใช้<input autocomplete="off">ซึ่งดูเหมือนว่าจะถูกละเว้นโดยป้อนรหัสผ่านโดยอัตโนมัติ (ใน Chrome นั่นคือ Firefox จะเชื่อฟัง)

โซลูชั่นที่อัปเดตแล้ว

<form autocomplete="off">โครเมี่ยมในขณะนี้ละเว้น ดังนั้นวิธีแก้ปัญหาดั้งเดิมของฉัน (ซึ่งฉันลบไปแล้ว) จึงกลายเป็นความโกรธทั้งหมด

เพียงสร้างฟิลด์สองฟิลด์และทำให้ซ่อนด้วย "display: none" ตัวอย่าง:

<!-- fake fields are a workaround for chrome autofill getting the wrong fields -->
<input style="display:none" type="text" name="fakeusernameremembered"/>
<input style="display:none" type="password" name="fakepasswordremembered"/>

จากนั้นให้วางเขตข้อมูลจริงของคุณไว้ด้านล่าง

อย่าลืมเพิ่มความคิดเห็นหรือคนอื่น ๆ ในทีมของคุณจะสงสัยว่าคุณกำลังทำอะไร!

อัปเดตมีนาคม 2559

เพิ่งทดสอบกับ Chrome ล่าสุด - ทั้งหมดดี นี่เป็นคำตอบที่ค่อนข้างเก่า แต่ฉันต้องการพูดถึงว่าทีมของเราใช้มันมาหลายปีแล้วในโครงการหลายสิบโครงการ มันยังใช้งานได้ดีแม้จะมีความคิดเห็นด้านล่าง ไม่มีปัญหาเกี่ยวกับการเข้าถึงได้เนื่องจากฟิลด์display:noneหมายถึงพวกเขาไม่ได้รับการมุ่งเน้น ดังที่ฉันได้กล่าวไปแล้วว่าคุณต้องวางมันไว้ข้างหน้าสนามจริงของคุณ

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

โค้ดตัวอย่างโดยใช้ jQuery (สมมติว่าคุณให้คลาสปลอมในฟิลด์):

        $(".fake-autofill-fields").show();
        // some DOM manipulation/ajax here
        window.setTimeout(function () {
            $(".fake-autofill-fields").hide();
        },1);

อัปเดตกรกฎาคม 2561

โซลูชันของฉันใช้งานไม่ได้อีกต่อไปเนื่องจากผู้เชี่ยวชาญด้านการต่อต้านการใช้งานของ Chrome ทำงานหนัก แต่พวกเขาได้โยนเราในรูปแบบของ:

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

งานนี้และส่วนใหญ่แก้ปัญหา

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

ในความเป็นจริงบางครั้งคุณจำเป็นต้องวางเขตข้อมูลปลอมจำนวนสองแห่งและลองใช้ในที่ต่างๆ ตัวอย่างเช่นฉันมีฟิลด์ปลอมอยู่ที่จุดเริ่มต้นของแบบฟอร์มของฉันแล้ว แต่เมื่อเร็ว ๆ นี้ Chrome ได้เริ่มต้นกรอกข้อมูลฟิลด์ 'อีเมล' ของฉันอีกครั้ง - ดังนั้นฉันจึงเพิ่มเป็นสองเท่าและใส่ในช่องปลอมมากขึ้นก่อนฟิลด์ 'อีเมล' . การลบล็อตแรกหรือล็อตที่สองของฟิลด์จะเปลี่ยนเป็นป้อนอัตโนมัติแบบ overzealous ที่ไม่ถูกต้อง

อัพเดท มี.ค. 2563

ยังไม่ชัดเจนว่าเมื่อใดและเมื่อใดโซลูชันนี้ยังใช้งานได้ ดูเหมือนว่าจะยังคงทำงานบางครั้ง แต่ไม่ตลอดเวลา

ในความคิดเห็นด้านล่างคุณจะพบคำแนะนำเล็กน้อย หนึ่งที่เพิ่มโดย @anilyeni อาจคุ้มค่ากับการตรวจสอบเพิ่มเติม:

ตามที่ฉันสังเกตเห็นautocomplete="off"ทำงานบน Chrome 80 หากมีองค์ประกอบน้อยกว่า 3 <form>ตัว ฉันไม่รู้ว่าอะไรเป็นตรรกะหรือเอกสารที่เกี่ยวข้องเกี่ยวกับมัน

นอกจากนี้รายการนี้จาก @dubrox อาจเกี่ยวข้องด้วยแม้ว่าฉันจะยังไม่ได้ทดสอบ:

ขอบคุณมากสำหรับเคล็ดลับ แต่โปรดอัปเดตคำตอบเพราะdisplay:none;มันใช้งานไม่ได้อีกต่อไป แต่position: fixed;top:-100px;left:-100px; width:5px;ทำ :)

อัปเดต APRIL 2020

ค่าพิเศษสำหรับ chrome สำหรับคุณลักษณะนี้กำลังทำงาน: (ทดสอบกับอินพุต - แต่ไม่ใช่โดยฉัน) autocomplete="chrome-off"


7
ฉันแน่ใจว่าสิ่งนี้จะทำงานตามที่คุณอธิบายได้อย่างสมบูรณ์แบบการป้อนอัตโนมัติแบบแก้ปัญหาที่ฉันกำลังประสบกับอินพุตก่อนฟิลด์รหัสผ่าน น่าเสียดายที่มันไม่ได้ผลสำหรับฉันฉันวาง autocomplete = "off" ให้กับทั้งแบบฟอร์มและอินพุตทั้งหมดและพวกเขายังคงได้รับการเติมเต็ม ทางออกเดียวที่ได้ผลสำหรับฉันคือลิงค์ของกู๊ดอายด้านบน (วางการป้อนข้อมูลที่ซ่อนอยู่ชนิดที่สอง = "รหัสผ่าน" ก่อนที่รหัสผ่านจะปิดการตรวจสอบการแก้ปัญหาของโครเมี่ยม)
รัฐสภา

19
สิ่งนี้ใช้งานได้ดีฉันก็ใช้เช่นกัน แต่เนื่องจาก Chrome อัปเกรดบางช่วงเวลาที่ผ่านมา (ระหว่างนั้นถึงวันที่ 5 พฤษภาคม) Chrome จึงเพิกเฉยต่อคุณสมบัติของฟอร์ม :(
Tominator

13
Google ได้ทำการตัดสินใจใน (Chrome v34 ฉันคิดว่า) เพื่อให้เป็นนโยบายของ ALWAYS เสมอไม่สนใจการเติมข้อความอัตโนมัติ = "ปิด" รวมถึงคำสั่งระดับรูปแบบ ... ซึ่งจะดีถ้าจริง ๆ แล้วมันมีช่องทางที่ถูกต้อง
Jammer

10
ลองใช้ autocomplete = "false" ไม่ใช่ autocomplete = "off"
roughcoder

242
คุณลักษณะนี้จำเป็นต้องใช้:autocomplete="I told you I wanted this off, Google. But you would not listen."
rybo111

265

หลังจากเดือนและเดือนแห่งการดิ้นรนฉันพบว่าวิธีแก้ปัญหานั้นง่ายกว่าที่คุณคิด:

แทนที่จะautocomplete="off"ใช้autocomplete="false" ;)

เรียบง่ายเช่นนั้นและใช้งานได้อย่างมีเสน่ห์ใน Google Chrome เช่นกัน!


อัปเดตสิงหาคม 2019 (ให้เครดิตกับ @JonEdiger ในความคิดเห็น)

หมายเหตุ: ข้อมูลจำนวนมากออนไลน์บอกว่าเบราว์เซอร์ถือว่า autocomplete = 'false' เป็นเหมือนกับ autocomplete = 'off' อย่างน้อยในนาทีนี้การป้องกันการเติมข้อความอัตโนมัติสำหรับเบราว์เซอร์ทั้งสามนี้

ตั้งไว้ที่ระดับรูปแบบจากนั้นสำหรับอินพุตที่คุณต้องการปิดตั้งค่าที่ไม่ถูกต้องเช่น 'none':

<form autocomplete="off"> 
  <input type="text" id="lastName" autocomplete="none"/> 
  <input type="text" id="firstName" autocomplete="none"/>
</form>

8
ทำงานให้ฉัน! แต่มีข้อสังเกตที่สำคัญอย่างหนึ่ง: ฉันมี 5 ฟิลด์ในหน้าเว็บของฉัน: ชื่อ, ที่อยู่, รหัสไปรษณีย์, โทรศัพท์และอีเมล เมื่อฉันรวมการเติมข้อความอัตโนมัติ = 'false' ในแบบฟอร์มและในฟิลด์ชื่อมันยังคงใช้งานได้ อย่างไรก็ตามเมื่อฉันรวมการเติมข้อความอัตโนมัติ = 'false' ลงในช่องที่อยู่ด้วยเช่นกันมันจะหยุดการป้อนอัตโนมัติอีกครั้ง! ดังนั้นคุณต้องใส่คุณสมบัติการเติมข้อความอัตโนมัติไม่ได้อยู่ในฟิลด์การเข้าสู่ระบบหรือชื่อ แต่ในฟิลด์ต่อไปนี้ด้วย! (ทำงานบน Chrome 43.0.2357.81 ตั้งแต่วันที่ 2015-05-27)
Dvd Franco

45
หากสิ่งนี้ไม่ได้ผลสำหรับคุณ: โปรดจำไว้ว่ามี 2 วิธีที่ผู้ใช้ Chrome "ช่วย" AUTOCOMPLETE จะแจ้งให้ทราบตามการส่งก่อนหน้าในแบบฟอร์มเดียวกันที่ยื่นและจะส่งผลกระทบต่อคนที่ใช้แบบฟอร์มมากกว่าหนึ่งครั้ง การเติมข้อความอัตโนมัติถูกปิดใช้งานด้วยการเติมข้อความอัตโนมัติ = "ปิด" การป้อนอัตโนมัติจะแจ้งตามสมุดที่อยู่จากแบบฟอร์มที่คล้ายกันในหน้าอื่น ๆ นอกจากนี้ยังจะเน้นฟิลด์ที่มีการเปลี่ยนแปลง ป้อนอัตโนมัติสามารถปิดการใช้งานด้วย autocomplete = "false"
genkilabs

4
สิ่งนี้ใช้ไม่ได้สำหรับฉัน (เวอร์ชัน 43.0.2357.124 m) นี่อาจเป็นการกำกับดูแลโดย Google ซึ่งขณะนี้ได้รับการแก้ไขแล้ว ดูเหมือนว่าพวกเขากำลังคิดว่า "ผู้ใช้ถูกต้องเสมอ" ในสิ่งที่พวกเขาต้องการเติมข้อมูลอัตโนมัติทุกอย่าง ปัญหาคือแบบฟอร์มการลงทะเบียนของฉันบันทึกข้อมูลผู้ใช้เช่นเดียวกับแบบฟอร์มการเข้าสู่ระบบซึ่งแน่นอนที่สุดไม่ใช่สิ่งที่ผู้ใช้ต้องการ ...
rybo111

3
YEP มันทำงานได้ใน Chrome 43.0.2357 !! พฤติกรรมนี้ใน Chrome น่ารำคาญมากและวิธีแก้ปัญหานี้ใช้เวลาพอสมควรในการคิดออก ขอบคุณสำหรับคำตอบ.
Adriano Rosa

3
ไม่ทำงานกับ Chrome 44.0.2403.157 คุณสมบัตินี้ทำงานได้อย่างไรและไม่ทำงานกับเวอร์ชันที่แตกต่างกัน มันไร้สาระ
Mattijs

120

บางครั้งแม้autocomplete=offจะไม่ป้องกันการกรอกข้อมูลประจำตัวในช่องที่ไม่ถูกต้อง

วิธีหลีกเลี่ยงปัญหาคือปิดใช้งานการป้อนอัตโนมัติของเบราว์เซอร์โดยใช้โหมดอ่านอย่างเดียวและตั้งค่าการเขียนที่โฟกัสได้:

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

focusเหตุการณ์ที่เกิดขึ้นในการคลิกเมาส์และแท็บผ่านทุ่งนา

ปรับปรุง:

Mobile Safari ตั้งค่าเคอร์เซอร์ในฟิลด์ แต่ไม่แสดงแป้นพิมพ์เสมือนจริง วิธีแก้ปัญหาใหม่นี้ใช้งานได้เหมือน แต่เคยจัดการกับแป้นพิมพ์เสมือนจริง:

<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 (เพียงเดาเนื่องจากการสังเกต) เนื่องจากเบราว์เซอร์เป็นอินสแตนซ์สุดท้ายและคุณไม่สามารถควบคุมได้

การแก้ไขแบบอ่านอย่างเดียวด้านบนนี้ใช้งานได้สำหรับฉัน


12
ช่างเป็นตัวแก้ไขที่ยอดเยี่ยม :) คุณควรแทนที่ jquery ด้วยสิ่งนี้: this.removeAttribute ("class")
Roey

ฉันใช้สิ่งนี้เพื่อหยุดการ dropdwonlist ไม่ให้ถูกป้อนอัตโนมัติ แต่ก็หยุดอ่านได้อย่างเดียวดังนั้นมันจึงไม่ได้ดู ไอเดียเด็ด ๆ !
สบาย

1
@Clint: ข้อมูลโค้ดของฉันด้านบนจะลบแอททริบิวแบบอ่านอย่างเดียวทันทีที่ผู้ใช้ป้อนฟิลด์ (ต่อคลิกเมาส์หรือปุ่มแท็บ) ฉันเดาคุณหมายถึงเขตข้อมูลซึ่งได้รับการป้องกันโดยอัตโนมัติแต่ไม่ได้สัมผัสโดยผู้ใช้ วัตถุประสงค์ของฟิลด์นี้คืออะไร - และจำเป็นต้องได้รับการคุ้มครองหรือไม่ ขึ้นอยู่กับสถานการณ์การลบแอตทริบิวต์อ่านอย่างเดียวทั้งหมดที่ส่งอาจเป็นตัวเลือก คุณสามารถเพิ่มความคิดเห็นที่เฉพาะเจาะจงมากขึ้นเกี่ยวกับปัญหาของคุณ? บางทีฉันอาจจะสามารถช่วยให้คุณออก :)
dsuess

1
หากคุณใช้ JavaScript ทำไมไม่ตั้งค่าเป็นdummyแล้วจึงลบค่าอีกครั้ง การเพิ่มและลบฟังก์ชั่นแบบอ่านอย่างเดียวที่เป็นอันตรายจะเกิดอะไรขึ้นถ้าเบราว์เซอร์ไม่ต้องการให้คุณมุ่งเน้นไปที่มัน
rybo111

1
เห็นได้ชัดว่า Google จะพยายามที่จะทำให้การตัดสินใจของเราทุกคนที่นี่พวกเขาปิดตั๋วเกี่ยวกับการเติมข้อความอัตโนมัติ = "ปิด": bugs.chromium.org/p/chromium/issues/detail?id=468153 แต่มีตั๋วอีกใบหนึ่งเปิดขึ้นเพื่อรวบรวมกรณีผู้ใช้ที่ถูกต้องสำหรับการปิดใช้งานการป้อนอัตโนมัติโปรดตอบตั๋วนี้เพื่อเพิ่มการรับรู้ปัญหานี้ได้ที่นี่: bugs.chromium.org/p/chromium/issues/detail?id=587466
Norman Xu

81

หากคุณกำลังใช้คุณสมบัติของช่องค้นหาให้ลองตั้งค่าtypeคุณลักษณะsearchดังต่อไปนี้:

<input type="search" autocomplete="off" />

สิ่งนี้ใช้ได้กับฉันใน Chrome v48 และดูเหมือนจะเป็นมาร์กอัปที่ถูกกฎหมาย:

https://www.w3.org/wiki/HTML/Elements/input/search


ใช่ :) ขอบคุณ! ใช้งานได้ใน Chrome 67.0.3396.99 (ฉันคิดว่าลิงก์ของคุณควรเป็น: w3.org/wiki/HTML/Elements/input/searchณ เดือนกันยายน 2018)
Andy King

4
ที่สุด! ยังคงใช้งานได้เวอร์ชั่น 69.0.3497.100 (รุ่นเป็นทางการ) (64 บิต) นี่ควรเป็นคำตอบที่แท้จริง!
Venson

1
ทุกคนถูกและผิดและคุณควรเขียน autocomplete = "off" ในแท็ก <form autocomplete = "off"> แทนการป้อนข้อมูลและสิ่งนี้จะหยุดพฤติกรรมป้อนอัตโนมัติ
demopix

2
ใช้งานได้หากคุณตั้งค่าการเติมข้อความอัตโนมัติ = "ปิด" ในแบบฟอร์ม (เพื่อเปลี่ยนแบบกว้างเริ่มต้นนั้น) และเพียงแค่ต้องตั้งค่า type = "ค้นหา" บน <input>
John

9
หลังจาก Chrome รุ่น 72.XX การแก้ไขนี้ใช้ไม่ได้ ค้นหา fixe ล่าสุดได้ที่นี่stackoverflow.com/a/55045439/1161998
Adheep Mohamed Abdul Kader

65

ลองสิ่งนี้ ฉันรู้ว่าคำถามนั้นค่อนข้างเก่า แต่นี่เป็นแนวทางที่แตกต่างสำหรับปัญหา

ฉันยังสังเกตเห็นว่าปัญหามาเหนือ passwordสนาม

ฉันลองทั้งสองวิธีเช่น

<form autocomplete="off"> และ <input autocomplete="off">ไม่มีใครทำงานให้ฉันได้

ดังนั้นฉันจึงแก้ไขโดยใช้ตัวอย่างด้านล่าง - เพียงเพิ่มฟิลด์ข้อความอื่นด้านบนฟิลด์ประเภทรหัสผ่านและสร้าง display:noneเพียงแค่เพิ่มฟิลด์ข้อความอื่นเหนือฟิลด์พิมพ์รหัสผ่านและทำให้มัน

บางสิ่งเช่นนี้

<input type="text" name="prevent_autofill" id="prevent_autofill" value="" style="display:none;" />
<input type="password" name="password_fake" id="password_fake" value="" style="display:none;" />
<input type="password" name="password" id="password" value="" />

หวังว่ามันจะช่วยใครซักคน


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

2
คำอธิบายอย่างรวดเร็วเกี่ยวกับสาเหตุที่แฮ็คนี้ใช้งานได้ (ตอนนี้): Chrome เห็นอินพุต = รหัสผ่านตัวแรกและป้อนอัตโนมัติและจะถือว่าฟิลด์นั้นก่อนหน้านี้โดยตรงจะต้องเป็นฟิลด์ชื่อผู้ใช้และป้อนชื่อผู้ใช้อัตโนมัติ @JeffreySimon สิ่งนี้ควรอธิบายปรากฏการณ์ของหมายเลขผู้ใช้ในช่องยืนยันอีเมล (ฉันเห็นสิ่งเดียวกันในแบบฟอร์มของฉัน)
MrBoJangles

1
@ kentcdodds - ไม่แน่ใจว่าคุณหมายถึงอะไรไม่ทำงานอีกต่อไป jsbin ของคุณไม่มีฟิลด์รหัสผ่านดังนั้นจึงเป็นสถานการณ์อื่น ฉันใช้โซลูชั่นนี้มานานหลายปีและล่าสุดฉันสังเกตเห็นว่ามันจำเป็นและใช้ได้กับฉันเมื่อสัปดาห์ที่แล้ว (มีนาคม 2558)
mike nelson

1
ไชโย! ทางออกที่ดูเหมือนว่าจะทำงาน! ผมจะแนะนำให้เขตข้อมูลชื่อpasswordและมีactual_passwordสำหรับเขตข้อมูลที่ถูกต้องเป็นของ Google nameในขณะนี้ดูเหมือนจะมองไปที่ แต่นี้หมายความว่า Chrome จะไม่แล้วบันทึกรหัสผ่านซึ่งเป็นฟังก์ชั่นที่จริงผมต้องการ AAAAARRRRGHH!
rybo111

2
อัปเดต: สิ่งนี้ยังคงใช้งานได้ต่อปีนับตั้งแต่ครั้งสุดท้ายที่ฉันใช้งาน เราอาจมีผู้ชนะที่แข็งแกร่งที่นี่
MrBoJangles

48

ฉันไม่รู้ว่าทำไม แต่สิ่งนี้ช่วยและทำงานให้ฉัน

<input type="password" name="pwd" autocomplete="new-password">

ฉันไม่รู้ว่าทำไม แต่autocompelete = "รหัสผ่านใหม่"ปิดใช้งานการป้อนอัตโนมัติ มันทำงานในรุ่นโครเมี่ยม49.0.2623.112ล่าสุด


อัปเดต Chrome แล้ว แต่ก็ยังใช้งานได้สำหรับฉัน 50.0.2661.87 (64 บิต)
Tauras

น่าเสียดายที่เมื่อส่งแบบฟอร์ม (หรือเมื่อช่องข้อมูลถูกซ่อน / ลบ) Chrome จะขอบันทึกการเข้าสู่ระบบที่เปลี่ยนแปลง
sibbl

ทำงานในเวอร์ชัน 51.0.2704.79 m
Geoffrey Hale

ศักดิ์สิทธิ์ f *** เหตุใดจึงใช้งานได้ เป็นข้อบกพร่องหรือไม่? เพราะฉันทดสอบที่นี่และวางไว้ในอินพุตเดียวเท่านั้นและทำงานได้ทั้งล็อกอินและรหัสผ่าน แต่ฉันใส่ไว้ในรหัสผ่านเท่านั้น
Leandro RR

ฉันไม่รู้. ฉันคิดว่านั่นเป็น "สิ่ง" ของโครเมียมที่สร้างโดยนักพัฒนา บางทีฉันอาจเข้าใจผิด
Tauras

46

สำหรับฉันง่าย

<form autocomplete="off" role="presentation">

ทำมัน

ทดสอบกับหลาย ๆ เวอร์ชันแล้วลองครั้งสุดท้ายเมื่อวันที่ 56.0.2924.87


@ArnoldRoa เวอร์ชั่นที่เพิ่มเข้ามามีอยู่ในเว็บไซต์ของเราตั้งแต่วันที่ฉันโพสต์และมีรุ่นไม่กี่แห่งที่ใช้งานได้ดี คุณใช้เวอร์ชั่นไหน PC / Mac?
Kuf

ไม่ทำงานกับ 57.0.2987.110 Chrome เน้นสีเหลืองและเติมฟิลด์ด้วยรหัสผ่านที่บันทึกไว้ของฉัน แต่หน้านี้เป็นหน้าการจัดการผู้ใช้ไม่ใช่หน้าเข้าสู่ระบบ

1
@ Dummy ฉันทดสอบแล้วตอนนี้ด้วย chrome ล่าสุด (57) และมันก็ยังใช้ได้สำหรับฉัน คุณทำอะไรพิเศษด้วยฟิลด์อินพุตหรือไม่ คุณใส่รหัสของคุณที่ไหนที่ฉันสามารถลองทำซ้ำได้?
2560

3
Windows รุ่น 64.0.3282.186 (รุ่นเป็นทางการ) (64 บิต) 2018-03-01 ไม่ทำงานเพื่อปิดใช้งานการป้อนอัตโนมัติ
billy jean


25

คุณต้องเพิ่มคุณสมบัตินี้:

autocomplete="new-password"

ลิงค์ที่มา: บทความเต็ม


คุณมีแหล่งข้อมูลใดบ้างที่จะทราบได้อย่างไร
AlexioVay

ใช้งานได้ แต่ไม่ใช้ความหมายตามที่สามารถใช้กับชื่อผู้ใช้และฟิลด์อื่น ๆ
Robin Andrews

1
หน้าเอกสารประกอบ: developer.mozilla.org/en-US/docs/Web/Security/
......

19

มันง่ายและยุ่งยากมาก :)

Google Chrome พื้นค้นหาองค์ประกอบรหัสผ่านทุกครั้งแรกที่มองเห็นภายใน<form>, <body>และ<iframe>แท็กเพื่อเปิดใช้งานเติมเงินอัตโนมัติสำหรับพวกเขาเพื่อที่จะปิดการใช้งานนี้คุณจะต้องเพิ่มองค์ประกอบรหัสผ่านหุ่นดังต่อไปนี้:

    • หากองค์ประกอบรหัสผ่านของคุณอยู่ใน<form>แท็กคุณต้องใส่องค์ประกอบจำลองเป็นองค์ประกอบแรกในแบบฟอร์มของคุณทันทีหลังจาก<form>เปิดแท็ก

    • หากองค์ประกอบรหัสผ่านของคุณไม่อยู่ใน<form>แท็กให้ใส่องค์ประกอบจำลองเป็นองค์ประกอบแรกในหน้า html ของคุณทันทีหลังจาก<body>เปิดแท็ก

  1. คุณต้องซ่อนองค์ประกอบจำลองโดยไม่ใช้ css display:noneดังนั้นโดยทั่วไปให้ใช้สิ่งต่อไปนี้เป็นองค์ประกอบรหัสผ่านจำลอง

    <input type="password" style="width: 0;height: 0; visibility: hidden;position:absolute;left:0;top:0;"/>

1
เยี่ยมมากคุณค้นหาอัลกอริทึมของ Chrome ได้อย่างไร ฉันเพิ่งพบว่าวิธีเก่าของฉันเปลี่ยนค่ากับ JS หลังจากโหลดหน้าเว็บด้วยตัวจับเวลา setTimeout ไม่ทำงานอีกต่อไป แต่มันใช้งานได้สมบูรณ์แบบ!

น่าเสียดายที่ใช้ไม่ได้กับอินพุตกล่องข้อความปกติ
ตา

1
อันที่จริงมันใช้งานได้เพียงตั้งค่าคุณสมบัติชื่อ)
Fareed Alnamrouti

ใน Chrome 58 สิ่งนี้ไม่ทำงาน ใช้ความกว้าง: 1px หากช่องรหัสผ่านถูกซ่อนไว้โดยสมบูรณ์ Chrome จะป้อนอัตโนมัติตามปกติ นอกจากนี้ดัชนี z: -999 อาจมีประโยชน์ดังนั้นจึงไม่ทับซ้อนเนื้อหาใด ๆ
cristiancastrodc

1
ใช้งานได้กับ Chrome 67.0 ในองค์ประกอบ html เชิงมุม<form *ngIf="!loggedIn()" #loginForm="ngForm" class="navbar-form navbar-right" (ngSubmit)="login()"><input type="password" style="width: 0;height: 0; visibility: hidden;position:absolute;left:0;top:0;"/><input type="text" #username="ngModel" placeholder="Username" class="form-control" required autocomplete="off" name="username" [(ngModel)]="model.username"><input type="password" #password="ngModel" placeholder="Password" class="form-control" required autocomplete="off" name="password" [(ngModel)]="model.password">...
Junior Mayhé

19

นี่คือโซลูชันที่ฉันเสนอเนื่องจาก Google ยืนยันที่จะเอาชนะทุกการทำงานที่ผู้คนดูเหมือนจะทำ

ตัวเลือก 1 - เลือกข้อความทั้งหมดเมื่อคลิก

ตั้งค่าของอินพุตเป็นตัวอย่างสำหรับผู้ใช้ของคุณ (เช่นyour@email.com) หรือเลเบลของฟิลด์ (เช่นEmail) และเพิ่มคลาสที่เรียกfocus-selectไปยังอินพุตของคุณ:

<input type="text" name="email" class="focus-select" value="your@email.com">
<input type="password" name="password" class="focus-select" value="password">

และนี่คือ jQuery:

$(document).on('click', '.focus-select', function(){
  $(this).select();
});

ฉันไม่เห็น Chrome เลยยุ่งกับค่าจริงๆ มันคงจะบ้าแน่ ๆ หวังว่านี่จะเป็นทางออกที่ปลอดภัย

ตัวเลือกที่ 2 - ตั้งค่าอีเมลเป็นช่องว่างแล้วลบ

สมมติว่าคุณมีสองอินพุตเช่นอีเมลและรหัสผ่านตั้งค่าของฟิลด์อีเมลเป็น" "(ช่องว่าง) และเพิ่มคุณสมบัติ / ค่าautocomplete="off"แล้วล้างสิ่งนี้ด้วย JavaScript คุณสามารถปล่อยให้รหัสผ่านว่างเปล่า

หากผู้ใช้ไม่มี JavaScript ด้วยเหตุผลบางประการตรวจสอบให้แน่ใจว่าคุณได้ตัดแต่งอินพุตเซิร์ฟเวอร์ (อาจเป็นไปได้) ในกรณีที่ไม่มีพื้นที่ว่าง

นี่คือ jQuery:

$(document).ready(function() {
  setTimeout(function(){
    $('[autocomplete=off]').val('');
  }, 15);
});

ฉันตั้งค่าการหมดเวลาเป็น15เพราะ5ดูเหมือนว่าจะทำงานเป็นครั้งคราวในการทดสอบของฉันดังนั้นการเพิ่มจำนวนนี้จึงดูเหมือนเป็นการเดิมพันที่ปลอดภัย

การไม่ตั้งค่าเริ่มต้นเป็นช่องว่างจะทำให้ Chrome ปล่อยให้อินพุตเป็นสีเหลืองราวกับว่ามีการป้อนอัตโนมัติ

ตัวเลือก 3 - อินพุตที่ซ่อนอยู่

วางสิ่งนี้ไว้ที่จุดเริ่มต้นของแบบฟอร์ม:

<!-- Avoid Chrome autofill -->
<input name="email" class="hide">

CSS:

.hide{ display:none; }

ตรวจสอบให้แน่ใจว่าคุณเก็บบันทึกย่อ HTML ไว้เพื่อให้ผู้พัฒนารายอื่นไม่ได้ลบออก! ตรวจสอบให้แน่ใจว่าชื่อของอินพุตที่ซ่อนนั้นเกี่ยวข้อง


@Vaia - คุณได้ลองไปยังหน้าอื่นแล้วกดปุ่มย้อนกลับ? ฉันได้ผลลัพธ์ที่หลากหลาย - อาจต้องมีการปรับเปลี่ยน
rybo111

ฉันไม่ได้ลองตัวเลือก 1 ถ้าคุณหมายถึงอย่างนั้น นอกจากนี้ฉันเพียงแค่ต้องปิดใช้งานการป้อนอัตโนมัติบนโมดัลที่โหลดโดย ajax ซึ่งจะไม่ถูกเรียกด้วยปุ่มย้อนกลับ แต่ถ้าจะมีผลลัพธ์อื่นฉันจะบอกคุณ @ rybo111
Alexio

@ Vaia ฉันหมายถึงตัวเลือกที่ 2 - โปรดตอบกลับที่นี่หากคุณพบปัญหาใด ๆ ขอบคุณ
rybo111

15

ใช้ css text-security: discโดยไม่ใช้type = password type

HTML

<input type='text' name='user' autocomplete='off' />
<input type='text' name='pass' autocomplete='off' class='secure' />

or

<form autocomplete='off'>
    <input type='text' name='user' />
    <input type='text' name='pass' class='secure' />
</form>

CSS

input.secure {
    text-security: disc;
    -webkit-text-security: disc;
}

วิธีที่ดีที่สุดที่ฉันพบจนถึงตอนนี้! อย่างน้อย Chrome 64: /
scipper

สำหรับวัตถุประสงค์ของฉันนี้สมบูรณ์แบบขอบคุณ! Chrome ไม่ได้ป้อนอัตโนมัติหรือเติมข้อความอัตโนมัติไม่ได้เสนอที่จะบันทึกและไม่เพียง แต่จะถูกบดบังจากมุมมอง แต่จากคลิปบอร์ด - ฉันคัดลอกสิ่งที่ฉันพิมพ์และวางลงในแผ่นจดบันทึกและเพิ่งได้รับ "••• ••••••••" ยอดเยี่ยม!
Doug McLean

15

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

autocomplete="nope"

RE: 'พฤติกรรมที่ไม่คาดคิด' พฤติกรรมนี้เกิดขึ้นจาก Google ซึ่งเชื่อว่ารู้ดีกว่านักพัฒนาว่าทุกหน้าควรทำงานอย่างไร บางครั้งฉันแค่ต้องการป้อนรหัสผ่านแบบดิบศูนย์จีบขอบฟ้า
โจธรรมดา

3
ชุดค่าผสมนี้ใช้งานได้ดีที่สุดสำหรับฉัน: role = "presentation" autocomplete = "nope" ทดสอบกับ Chrome เวอร์ชัน 64.0.3282.186 (รุ่นทางการ) (64 บิต) ช่างเป็นฝันร้าย!
ยีนบิลลี่

2
สตริงแบบสุ่มทำงานได้สำหรับโครเมี่ยม แต่ไม่ใช่ firefox เพื่อความสมบูรณ์ฉันใช้ทั้ง "autocomplete = 'off-no-complete'" และตั้งค่าแอตทริบิวต์ readonly ด้วย onfocus = "this.readOnly = false" แอพของฉันเป็นแอปองค์กรที่ผู้ใช้ใช้ป้อนที่อยู่หลายพันรายการดังนั้นการใช้เคสเพื่อควบคุมสิ่งนี้เป็นเรื่องจริง - ฉันสามารถรับประกันการใช้ Javascript ได้ดังนั้นอย่างน้อยฉันก็จะได้รับสิ่งนี้สำหรับฉัน
ChronoFish

13

ฉันพบว่าการเพิ่มสิ่งนี้ลงในแบบฟอร์มทำให้ Chrome ไม่สามารถใช้การป้อนอัตโนมัติ

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

พบได้ที่นี่ https://code.google.com/p/chromium/issues/detail?id=468153#hc41

น่าผิดหวังจริง ๆ ที่ Chrome ได้ตัดสินใจว่ารู้ดีกว่านักพัฒนาเกี่ยวกับการเติมข้อความอัตโนมัติเมื่อใด มีความรู้สึกที่แท้จริงกับ Microsoft


ไม่ใช่ความจริงที่คุณบอกว่า PreventChromeAutocomplete ฉันสามารถทำให้การเติมข้อความอัตโนมัติให้ทำงานได้โดยพูดว่า autocomplete = "off" และ name = "somename" แต่จะใช้งานได้ก็ต่อเมื่อคุณตั้งชื่ออินพุตที่แตกต่างกันสองรายการในชื่อเดียวกัน ดังนั้นในกรณีของคุณ PreventChromeAutocomplete จะต้องถูกนำไปใช้กับอินพุตที่แตกต่างกันสองแบบ แปลกมาก ...
Joe Heyming

11
<input readonly onfocus="this.removeAttribute('readonly');" type="text">

เพิ่มแอตทริบิวต์แบบอ่านอย่างเดียวไปยังแท็กพร้อมกับการลบเหตุการณ์ onfocus เพื่อแก้ไขปัญหา


วิธีนี้ใช้ได้กับฟิลด์ข้อความ
Denis Slonovschi

9

สำหรับคอมโบรหัสผ่านชื่อผู้ใช้นี่เป็นปัญหาที่แก้ไขได้ง่าย การวิเคราะห์พฤติกรรมของ Chrome มองหารูปแบบ:

<input type="text">

ติดตามโดย:

<input type="password">

เพียงทำผิดขั้นตอนนี้โดยการยกเลิกสิ่งนี้:

<input type="text">
<input type="text" onfocus="this.type='password'">

น่าเสียดายสิ่งนี้มีผลกับสิ่งที่พิมพ์มากกว่าชื่อผู้ใช้ / รหัสผ่าน Chrome จะดูข้อความตัวยึดตำแหน่งเพื่ออนุมานสิ่งที่จะแนะนำ ตัวอย่างเช่น: jsbin.com/jacizu/2/edit
kentcdodds

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

4
แม้ว่าถ้าคุณเพิ่มช่องว่างด้านหน้าข้อความตัวยึดตำแหน่งของคุณก็จะปิดการใช้งานการแนะนำอัตโนมัติตามตัวยึดตำแหน่งด้วยเช่นกัน แฮ็คอย่างแน่นอนแม้ว่าจะไม่มากไปกว่าคำแนะนำอื่น ๆ jsbin.com/pujasu/1/edit
Bernesto

จริง ๆ แล้ว ... มันดูเหมือนจะได้ผลกับตัวอย่างของคุณ แต่ด้วยเหตุผลบางอย่างมันไม่ทำงานสำหรับฉัน :-(
kentcdodds

ฮา! นั่นเป็นสาเหตุที่เรียกว่าแฮ็ค ... คุณมีตัวอย่างที่คุณสามารถแชร์ในที่ที่มันไม่ทำงานหรือไม่?
Bernesto

8

ไมค์เนลสันให้การแก้ปัญหาไม่ได้สำหรับฉันใน Chrome 50.0.2661.102 m เพียงเพิ่มองค์ประกอบอินพุตประเภทเดียวกันพร้อมจอแสดงผล: ไม่มีการตั้งค่าใด ๆ ที่จะไม่ปิดใช้งานเบราว์เซอร์ดั้งเดิมอัตโนมัติอีกต่อไป ตอนนี้จำเป็นต้องทำซ้ำแอตทริบิวต์ชื่อของช่องป้อนข้อมูลที่คุณต้องการปิดการใช้งานการเติมข้อความอัตโนมัติ

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

<input name="dpart" disabled="disabled" type="password" style="display:none;">
<input name="dpart" type="password">
<input type="submit">

สำหรับเดือนมิถุนายน 2016 และ Chrome 51.0.2704.106 m นี่เป็นทางออกการทำงานเดียวที่นี่
Denis

แต่แบบฟอร์มจะเลือกฟิลด์ป้อนข้อมูลที่มองเห็น (ขวา) ที่คุณต้องการหรือไม่ เพราะมันชื่อเดียวกัน
AlexioVay

@Vaia การเพิ่มแอททริบิวต์ที่ปิดใช้งานไปยังองค์ประกอบที่ซ้ำกันจะทำให้ไม่สามารถส่งได้
mccainz

8

ในปี 2559 Google Chrome เริ่มเพิกเฉยautocomplete=offแม้ว่าจะอยู่ใน W3C คำตอบที่โพสต์ :

ส่วนที่ยุ่งยากนี่คือที่ใดที่หนึ่งระหว่างการเดินทางของการเติมข้อความอัตโนมัติเว็บ = off กลายเป็นค่าเริ่มต้นสำหรับเขตข้อมูลหลายรูปแบบโดยไม่มีการคิดที่แท้จริงว่าจะเป็นสิ่งที่ดีสำหรับผู้ใช้หรือไม่ นี่ไม่ได้หมายความว่าไม่มีกรณีที่ถูกต้องมากที่คุณไม่ต้องการให้ข้อมูลการป้อนอัตโนมัติของเบราว์เซอร์ (เช่นในระบบ CRM) แต่เราเห็นว่าเป็นกรณีส่วนน้อย และด้วยเหตุนี้เราจึงเริ่มเพิกเฉยการเติมข้อความอัตโนมัติ = ปิดสำหรับข้อมูลป้อนอัตโนมัติของ Chrome

ที่สำคัญกล่าว: เรารู้ดีกว่าสิ่งที่ผู้ใช้ต้องการ

พวกเขาเปิดบั๊กอื่นเพื่อโพสต์กรณีการใช้ที่ถูกต้องเมื่อต้องการเติมข้อความอัตโนมัติ = ปิด

ฉันไม่ได้เห็นปัญหาเกี่ยวกับการเติมข้อความอัตโนมัติผ่านแอปพลิเคชัน B2B ทั้งหมดของฉัน แต่มีเฉพาะอินพุตประเภทรหัสผ่านเท่านั้น

ป้อนอัตโนมัติในขั้นตอนนี้หากมีฟิลด์รหัสผ่านใด ๆ บนหน้าจอแม้แต่ฟิลด์ที่ซ่อนอยู่ ในการแยกลอจิกนี้คุณสามารถใส่รหัสผ่านแต่ละฟิลด์ลงในฟอร์มของตัวเองถ้ามันไม่ทำลายลอจิกหน้าของคุณเอง

<input type=name >

<form>
    <input type=password >
</form>

4
เนื่องจากคำตอบของคุณเป็นคำตอบล่าสุดคุณช่วยกรุณาเพิ่มเติมที่เพิ่มautocomplete="pineapple"หรือไม่ก็พูดพล่อยๆอื่น ๆ ก็ดูเหมือนว่าจะแก้ไขปัญหาได้หรือไม่ อย่างน้อยมันก็ทำในตอนท้ายของฉัน!
Douwe de Haan

1
@DouwedeHaan สิ่งนี้ดีจนกระทั่งแบบฟอร์มได้รับการบันทึกจากนั้นการเติมข้อความอัตโนมัติจะให้คำแนะนำสำหรับฟิลด์ 'สับปะรด' ที่บันทึกไว้ แต่อาจใช้แฮชแบบสุ่มสำหรับค่าเติมข้อความอัตโนมัติตัวอย่างเช่นจะได้รับการปัดเศษนี้?
digout

@digout ฉันเห็นด้วย ตัวอย่างที่ดีคือการใช้ UUID สำหรับสิ่งประเภทนี้ ตรวจสอบให้แน่ใจว่าสตริงนั้นไม่ซ้ำกัน!
Douwe de Haan

7

หากคุณมีปัญหาเกี่ยวกับการรักษาตัวแทน แต่ปิดใช้งานการป้อนอัตโนมัติของ Chrome ฉันพบวิธีแก้ปัญหานี้

ปัญหา

HTML

<div class="form">
    <input type="text" placeholder="name"><br>
    <input type="text" placeholder="email"><br>
    <input type="text" placeholder="street"><br>
</div>

http://jsfiddle.net/xmbvwfs6/1/

ตัวอย่างด้านบนยังคงสร้างปัญหาการป้อนอัตโนมัติ แต่ถ้าคุณใช้required="required"และบาง CSS คุณสามารถทำซ้ำตัวยึดตำแหน่งและ Chrome จะไม่รับแท็ก

สารละลาย

HTML

<div class="form">
    <input type="text" required="required">
    <label>Name</label>  
    <br>
    <input type="text" required="required">
    <label>Email</label>    
    <br>
    <input type="text" required="required">
    <label>Street</label>    
    <br>
</div>

CSS

input {
    margin-bottom: 10px;
    width: 200px;
    height: 20px;
    padding: 0 10px;
    font-size: 14px;
}
input + label {
    position: relative;
    left: -216px;
    color: #999;
    font-size: 14px;
}
input:invalid + label { 
    display: inline-block; 
}
input:valid + label { 
    display: none; 
}

http://jsfiddle.net/mwshpx1o/1/


นี่เป็นทางออกเดียวที่ใช้งานได้จริง ฉันไม่ชอบมันจริง ๆ แต่นั่นคือสถานะที่เลวร้ายที่เราอยู่ในขณะนี้ :-(
kentcdodds

ในปี 2560 อันนี้ยังใช้งานได้ดี เพียงต้องการสคริปต์นี้เพื่อบังคับinputโฟกัสหากผู้ใช้คลิกที่ตัวยึด "ปลอม": $("label").on("click",function(){ $(this).prev().focus(); });โปรดทราบว่าlabelไม่สามารถอยู่ก่อนinput... Chrome พบ! ทางออกที่สร้างสรรค์ดี! +1
Louys Patrice Bessette

7

ฉันไม่ชอบการสร้างเขตข้อมูลที่ซ่อนอยู่ฉันคิดว่าการทำให้เป็นเช่นนั้นจะทำให้เกิดความสับสนอย่างรวดเร็ว

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

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

สิ่งนี้ทำคือคุณต้องลบคุณลักษณะอ่านอย่างเดียวโดยการเลือกฟิลด์และในเวลานั้นคุณมีแนวโน้มมากที่สุดที่คุณจะใส่ข้อมูลผู้ใช้ของคุณเองและป้อนอัตโนมัติป้อนที่จะใช้


1
น่าเสียดายที่นี่ใช้งานไม่ได้อีกแล้ว :-( jsbin.com/sobise/edit?html,css,output
kentcdodds

7

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

ในช่องป้อนข้อมูล html ต่อไปนี้จะปิดทั้งสอง

Role="presentation" & autocomplete="off"

ในขณะที่การเลือกช่องป้อนข้อมูลสำหรับป้อนที่อยู่อัตโนมัติ Chrome จะละเว้นช่องป้อนข้อมูลเหล่านั้นซึ่งไม่มีองค์ประกอบ HTML ป้ายกำกับก่อนหน้า

เพื่อให้แน่ใจว่าตัวแยกวิเคราะห์โครมจะละเว้นช่องป้อนข้อมูลสำหรับป๊อปอัปที่อยู่ป้อนอัตโนมัติปุ่มที่ซ่อนอยู่หรือการควบคุมรูปภาพสามารถเพิ่มระหว่างฉลากและกล่องข้อความ การทำเช่นนี้จะทำให้ลำดับการแยกวิเคราะห์โครเมี่ยมของฉลาก - การสร้างคู่ป้อนอัตโนมัติ ช่องทำเครื่องหมายจะถูกละเว้นขณะแยกวิเคราะห์ฟิลด์ที่อยู่

Chrome ยังพิจารณาแอตทริบิวต์ "สำหรับ" ในองค์ประกอบป้ายกำกับด้วย มันสามารถใช้ในการแบ่งลำดับการแยกของโครเมี่ยม


ฉันรักคุณ. ทางออกเดียวในหน้านี้ที่ใช้งานได้จริง
วันเดวิสวอเตอร์เบอรี่

ใช้งานไม่ได้ในปี 2020
Kai Noack

7

เนื่องจากเราทุกคนมีปัญหานี้ฉันใช้เวลาในการเขียนส่วนขยาย jQuery ที่ใช้งานได้สำหรับปัญหานี้ Google ต้องติดตามมาร์กอัป html ไม่ใช่เพราะเราติดตาม Google

(function ($) {

"use strict";

$.fn.autoCompleteFix = function(opt) {
    var ro = 'readonly', settings = $.extend({
        attribute : 'autocomplete',
        trigger : {
            disable : ["off"],
            enable : ["on"]
        },
        focus : function() {
            $(this).removeAttr(ro);
        },
        force : false
    }, opt);

    $(this).each(function(i, el) {
        el = $(el);

        if(el.is('form')) {
            var force = (-1 !== $.inArray(el.attr(settings.attribute), settings.trigger.disable))
            el.find('input').autoCompleteFix({force:force});
        } else {
            var disabled = -1 !== $.inArray(el.attr(settings.attribute), settings.trigger.disable);
            var enabled = -1 !== $.inArray(el.attr(settings.attribute), settings.trigger.enable);
            if (settings.force && !enabled || disabled)
                el.attr(ro, ro).focus(settings.focus).val("");
        }
    });
};
})(jQuery);

เพียงเพิ่มไฟล์นี้ลงในไฟล์เช่น/js/jquery.extends.jsและรวมไว้ใน jQuery ที่ผ่านมา นำไปใช้กับองค์ประกอบแบบฟอร์มแต่ละรายการเมื่อโหลดเอกสารเช่นนี้:

$(function() {
    $('form').autoCompleteFix();
});

jsfiddle พร้อมการทดสอบ


6

ลองใช้jQueryรหัสต่อไปนี้ซึ่งใช้งานได้สำหรับฉัน

if ($.browser.webkit) {
    $('input[name="password"]').attr('autocomplete', 'off');
    $('input[name="email"]').attr('autocomplete', 'off');
}

โซลูชันที่ยอดเยี่ยมที่น่ากลัว
DKR

คุณสามารถเพิ่มลงautocomplete="off"ในฟิลด์อินพุตแทนการใช้ jquery และโดยวิธีนี้ไม่ทำงาน คำแนะนำเกี่ยวกับรหัสผ่าน Chrome ยังคงปรากฏขึ้น
Kai Noack

6

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

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


ส่วนแรกของคำตอบนี้ไม่เป็นความจริงอีกต่อไป: ข้อผิดพลาดของ Chrome
Joshua Drake

ฉันไม่แน่ใจว่าคุณกำลังทำอะไรอยู่ ว่า "ข้อผิดพลาด" autocomplete="off"เป็นเพียงตัวยึดสำหรับโครเมี่ยมให้กับคนเก็บของกรณีการใช้งานสำหรับ มีความเป็นไปได้ที่จะทำการลบออก แต่ก็ไม่ได้มีการระบุไว้อย่างชัดเจนและแน่นอนว่าไม่มีสิ่งใดที่ต้องการการก้าวกระโดดทางจิต พวกเขาอาจต้องการพิจารณาวิธีอื่นหรือวิธีที่ดีกว่าในการรักษา ไม่ว่ามันจะยังคงเป็นส่วนหนึ่งของสเป็คและอีกครั้งก็ไม่มีข้อบ่งชี้ว่ามันจะออกจากสเป็คเช่นกัน และมันยังใช้งานได้ในทุกเบราว์เซอร์เท่าที่ฉันทราบรวมถึง Chrome
Chris Pratt

เรามีบางกรณีที่ Chrome ไม่ได้รับการยอมรับโดยอัตโนมัติ = "ปิด"
Joshua Drake

1. คดีเล็ก ๆ น้อย ๆ ไม่ได้เป็นหลักฐาน 2. ดังที่ฉันพูดในคำตอบของฉันแบบฟอร์มการเติมส่วนขยายและสิ่งที่คล้ายกันอาจไม่และมักจะไม่เคารพสิ่งนี้ ในท้ายที่สุดมันก็ขึ้นอยู่กับลูกค้าและผู้ใช้ สิ่งที่คุณทำได้คือแนะนำว่าไม่ควรป้อนอัตโนมัติ
Chris Pratt

6

ตามรายงานข้อบกพร่องของ Chromium # 352347 Chrome จะไม่เคารพอีกต่อไปautocomplete="off|false|anythingelse"ไม่ว่าในรูปแบบหรืออินพุต

ทางออกเดียวที่ทำงานได้สำหรับฉันคือการเพิ่มฟิลด์รหัสผ่านจำลอง :

<input type="password" class="hidden" />
<input type="password" />

6

เมื่อตั้งค่าautocompleteให้offทำงานที่นี่ฉันมีตัวอย่างซึ่ง Google ใช้ในหน้าค้นหา ฉันพบสิ่งนี้จากองค์ประกอบการตรวจสอบ

ป้อนคำอธิบายรูปภาพที่นี่

แก้ไข : ในกรณีที่offไม่ได้ทำงานแล้วลองหรือfalse nofillในกรณีของฉันมันใช้งานได้กับ chrome รุ่น 48.0


5

นี่คือแฮ็คสกปรก -

คุณมีองค์ประกอบของคุณที่นี่ (เพิ่มแอตทริบิวต์ที่ปิดใช้งาน):

<input type="text" name="test" id="test" disabled="disabled" />

จากนั้นที่ด้านล่างของหน้าเว็บให้ใส่ JavaScript:

<script>
    setTimeout(function(){
        document.getElementById('test').removeAttribute("disabled");
        },100);
</script>

5

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

หากต้องการหลีกเลี่ยงการเปลี่ยนแปลงประเภทการป้อนข้อมูลเป็นข้อความและใช้แบบอักษรความปลอดภัยของ webkit ในรูปแบบที่คุณต้องการ

.secure-font{
-webkit-text-security:disc;}

<input type ="text" class="secure-font">

จากสิ่งที่ฉันเห็นนี้เป็นอย่างน้อยปลอดภัยเท่ากับ input type = password มันคัดลอกและวางปลอดภัย อย่างไรก็ตามมันมีช่องโหว่โดยการลบสไตล์ซึ่งจะลบเครื่องหมายดอกจันแน่นอนว่า input type = password สามารถเปลี่ยนเป็น input type = text ในคอนโซลได้อย่างง่ายดายเพื่อเปิดเผยรหัสผ่านที่ป้อนอัตโนมัติดังนั้นจึงเหมือนกันมาก


ขอบคุณ! นี่เป็นสิ่งเดียวที่ใช้งานได้ในโครเมี่ยม 49 วิธีการก่อนหน้านี้แตกเป็นโครมดูเหมือนว่าจะเติมอินพุตทั้งหมดด้วยtype="password"ตอนนี้
epelc

4

วิธีเดียวที่เหมาะกับฉันคือ: (จำเป็นต้องใช้ jQuery)

$(document).ready(function(e) {
    if ($.browser.webkit) {
        $('#input_id').val(' ').val('');
    }
});

4

ฉันประสบปัญหาเดียวกัน และนี่คือโซลูชันสำหรับปิดการใช้งานชื่อผู้ใช้และรหัสผ่านป้อนอัตโนมัติบน Chrome (เพิ่งทดสอบด้วย Chrome เท่านั้น)

    <!-- Just add this hidden field before password as a charmed solution to prevent auto-fill of browser on remembered password -->
    <input type="tel" hidden />
    <input type="password" ng-minlength="8" ng-maxlength="30" ng-model="user.password" name="password" class="form-control" required placeholder="Input password">

แก้ไขแปลก แต่อย่างใดที่เป็นสิ่งเดียวที่ทำงานสำหรับฉันในโครเมี่ยม 48 :)
Jacka
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.