Chrome ละเว้นการเติมข้อความอัตโนมัติ =“ ปิด”


444

ฉันสร้างเว็บแอปพลิเคชั่นซึ่งใช้แท็กบ็อกซ์ดรอปดาวน์ วิธีนี้ใช้งานได้ดีในทุกเบราว์เซอร์ยกเว้นเบราว์เซอร์ Chrome (เวอร์ชัน 21.0.1180.89)

แม้จะมีทั้งinputฟิลด์และformฟิลด์ที่มีแอautocomplete="off"ททริบิว แต่ Chrome ยืนยันที่จะแสดงประวัติแบบเลื่อนลงของรายการก่อนหน้าสำหรับฟิลด์ซึ่งจะกำจัดรายการแท็กบ็อกซ์


10
ในทางเทคนิคคำถามนี้ถูกถามประมาณ 5 เดือนก่อนที่คำถามจะอ้างอิงว่า "คำถามนี้มีคำตอบอยู่ที่นี่แล้ว" อันนั้นซ้ำกันอย่างที่มันมาหลังจากอันนี้
3071434

คำตอบ:


318

UPDATE

ดูเหมือนว่าตอนนี้ Chrome จะละเว้นstyle="display: none;"หรือstyle="visibility: hidden;แอตทริบิวต์

คุณสามารถเปลี่ยนเป็น:

<input style="opacity: 0;position: absolute;">
<input type="password" style="opacity: 0;position: absolute;">

จากประสบการณ์ของฉัน Chrome จะเติมข้อความให้อัตโนมัติก่อน<input type="password">และหลัง<input>โดยอัตโนมัติ ดังนั้นฉันได้เพิ่ม:

<input style="display:none">
<input type="password" style="display:none">

ไปด้านบนของ<form>และกรณีได้รับการแก้ไข


54
ไม่ทำงานอีกแล้ว chrome 40 ไม่ทำงานวิธีแก้ปัญหานี้
user881703

8
ไม่เพียง แต่เป็นที่น่าเกลียด แต่ฉันยังไม่สามารถหาคำอธิบายใด ๆ กับคำถามที่ว่าทำไม ??
Augustin Riedinger

4
ดูเหมือนว่าตอนนี้ Chrome จะไม่สนใจพวกเขาหากมีการแสดงผล: ไม่มีการใช้งานดังนั้นฉันจึงย้ายฟิลด์ออกจากมุมมองด้วยการกำหนดตำแหน่งที่แน่นอน ...
Christoph Leiter

1
display: none;จะหายไปองค์ประกอบไม่เกี่ยวกับการเติมข้อความอัตโนมัติ
Sandun Perera

276

ป้องกันการเติมชื่อผู้ใช้ (หรืออีเมล) และรหัสผ่านโดยอัตโนมัติ:

<input type="email" name="email"><!-- Can be type="text" -->
<input type="password" name="password" autocomplete="new-password">

ป้องกันฟิลด์เติมข้อความอัตโนมัติ ( อาจไม่ทำงาน ):

<input type="text" name="field" autocomplete="nope">

คำอธิบาย:

autocompleteยังคงทำงานใน<input>แม้จะมีautocomplete="off"แต่คุณสามารถเปลี่ยนเป็นสตริงสุ่มเช่นoffnope


"โซลูชัน"อื่น ๆสำหรับการปิดใช้งานการเติมข้อความอัตโนมัติในฟิลด์ (ไม่ใช่วิธีที่ถูกต้อง แต่จะใช้งานได้):

1

HTML:

<input type="password" id="some_id" autocomplete="new-password">

JS (onload):

(function() {
    var some_id = document.getElementById('some_id');
    some_id.type = 'text';
    some_id.removeAttribute('autocomplete');
})();

หรือใช้jQuery:

$(document).ready(function() {
    var some_id = $('#some_id');
    some_id.prop('type', 'text');
    some_id.removeAttr('autocomplete');
});

2

HTML:

<form id="form"></form>

JS (onload):

(function() {
    var input = document.createElement('INPUT');
    input.type = 'text';
    document.getElementById('form').appendChild(input);
})();

หรือใช้jQuery:

$(document).ready(function() {
    $('<input>', {
        type: 'text'
    }).appendTo($('#form'));
});

ในการเพิ่มมากกว่าหนึ่งช่องโดยใช้ jQuery:

function addField(label) {
  var div = $('<div>');
  var input = $('<input>', {
    type: 'text'
  });
  
  if(label) {
    var label = $('<label>', {
      text: label
    });
    
    label.append(input);
    div.append(label);    
  } else {
    div.append(input);    
  }  
  
  div.appendTo($('#form'));
}

$(document).ready(function() {
  addField();
  addField('Field 1: ');  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form"></form>


ทำงานใน:

  • Chrome: 49+

  • Firefox: 44+


ไม่มีรหัสคำตอบของคุณป้องกันการเติมข้อความอัตโนมัติอย่างไรถ้าการเติมข้อความอัตโนมัติ = "" ควรจะยอมรับบูลีน
Tallboy

autocomplete = "รหัสผ่านใหม่" เมื่อกำหนดให้กับฟิลด์รหัสผ่านทำงานให้ฉันด้วยโครเมี่ยม autocomplete = "off" บนแบบฟอร์มไม่ได้
วินาทีที่ 2 ไม่มี

2
สิ่งสำคัญที่สุด (และสิ่งเดียวที่ใช้งานได้สำหรับฉัน) คือการรับรองว่า ID และชื่อคุณสมบัติของคุณในฟิลด์ <input> ของคุณไม่มี "ชื่อผู้ใช้" หรือ "รหัสผ่าน" สิ่งนี้หยุดการเติมข้อความอัตโนมัติทั้งหมดสำหรับฉันในการเติมข้อความอัตโนมัติ = "ปิด" อย่างมีประสิทธิภาพ
GONeale

new-passwordเป็นสิ่งที่ดีสำหรับสิ่งที่ซ่อนอยู่ซึ่งจริงๆแล้วไม่ใช่รหัสผ่านขอบคุณ
antongorodezkiy

Lol autocomplete="nope"ใช้งานได้จริงสำหรับฉันเว้นแต่ฉันจะเพิ่มลงในทั้งสองแบบฟอร์มของฉัน เหมือนที่ผมสามารถมีมันอยู่บนสนามอย่างใดอย่างหนึ่งแล้วว่าข้อมูลจะไม่เติม แต่ข้อมูลอื่น ๆ จะยังคงเติม แต่ทันทีที่ฉันวางมันลงบนทั้งสองช่องให้ทั้งสองคนเริ่มต้นเติมข้อความอัตโนมัติอีกครั้ง
PrintlnParams

147

ดูเหมือนว่า Chrome จะไม่สนใจautocomplete="off"เว้นแต่จะอยู่บน<form autocomplete="off">แท็ก


สำหรับการตอบโต้ให้ใช้ 'autoComplete = off'
zero_cool

สำหรับคำอธิบายว่าทำไม Chrome ทำการเปลี่ยนแปลงนี้ให้ดูคำตอบนี้: stackoverflow.com/a/39689037/1766230 - พวกเขาให้ความสำคัญกับผู้ใช้มากกว่านักพัฒนา
ลุค

12
หากคุณต้องการมอบเหตุผลที่ถูกต้องให้กับทีม Chrome ในการใช้การเติมข้อความอัตโนมัติ = "ปิด" โปรดทำที่นี่: bugs.chromium.org/p/chromium/issues/detail?id=587466
Chris

@Digggid Chrome 71 ไม่ได้เพิกเฉยต่อคุณสมบัติ แต่ในบางกรณีมันจะไม่สนใจค่า "ปิด" การใช้ค่าอย่าง "ประเทศ" ยังใช้ได้สำหรับฉัน
Burak

1
เพียงแค่ให้ความกระจ่างเกี่ยวกับข้างต้นเนื่องจากมีรายงานที่ขัดแย้งกัน ในแท็กฟอร์มให้เพิ่ม autocomplete = "off" และในแต่ละแท็กอินพุตเพิ่ม autocomplete = "new-password" ทำงานตั้งแต่ Chrome 75
AndyP9

83

วิธีการที่ทันสมัย

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

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

ส่วนถัดไปเป็นทางเลือก จัดรูปแบบการป้อนข้อมูลของคุณให้สอดคล้องเพื่อไม่ให้ดูเหมือนreadonlyอินพุต

input[readonly] {
     cursor: text;
     background-color: #fff;
}

ตัวอย่างการทำงาน


50
@Basit - modern approachและนั่นคือเหตุผลที่ผมเรียกมันว่า ผู้ใช้น้อยกว่า 1% ในโลกปิดการใช้งาน Javascript จริงๆแล้วมันไม่คุ้มค่าที่จะมีผู้เข้าชมกลุ่มเล็ก ๆ เหล่านี้เมื่อเว็บไซต์ส่วนใหญ่ใช้ Javascript รับการพัฒนาเว็บไซต์เป็นเวลานานมากและเว็บไซต์ของฉัน 100% ใช้ Javascript และพึ่งพามันอย่างหนัก หากผู้ใช้ปิด Javascript นั่นเป็นปัญหาและทางเลือกของพวกเขาไม่ใช่ของฉัน พวกเขาจะไม่สามารถเข้าชมหรือใช้งานเว็บไซต์อย่างน้อย 90% ทางออนไลน์โดยที่ปิดอยู่ ... การโหวตของคุณไม่เกี่ยวข้องอย่างสมบูรณ์
Fizzix

19
สิ่งนี้ไม่สามารถใช้ได้ใน 49 วันนี้ Chrome "นักพัฒนา" กำลังดูโซลูชัน stackoverflow และลบออก
puchu

7
คำตอบจากเดือนกันยายนปี 2015 นี้เป็นสำเนาจากคำตอบในเดือนพฤศจิกายน 2014 ด้านล่าง
อดทน

5
2019 - ไม่ทำงาน
user2060451

1
สิ่งนี้จะทำลายโปรแกรมอ่านหน้าจอ
เกร็ก

80

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

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

Chrome เคารพการเติมข้อความอัตโนมัติ = ปิดเฉพาะเมื่อมีองค์ประกอบอินพุตอย่างน้อยหนึ่งองค์ประกอบในแบบฟอร์มที่มีค่าการเติมข้อความอัตโนมัติอื่น ๆ

สิ่งนี้จะไม่ทำงานกับฟิลด์รหัสผ่านซึ่งถูกจัดการแตกต่างกันมากใน Chrome ดูhttps://code.google.com/p/chromium/issues/detail?id=468153สำหรับรายละเอียดเพิ่มเติม

UPDATE: Bug ปิดเป็น "จะไม่แก้ไข" โดยทีมงานโครเมี่ยมที่ 11 มีนาคม 2016 ดูความคิดเห็นล่าสุดในรายงานข้อผิดพลาดของฉันยื่นเดิมสำหรับคำอธิบายแบบเต็มรูปแบบ TL; DR: ใช้แอตทริบิวต์การเติมข้อความอัตโนมัติแบบ semantic เช่น autocomplete = "new-street-address-address" เพื่อหลีกเลี่ยงการทำการป้อนอัตโนมัติของ Chrome


2
@Jonathan Cowley-Thom: ลองใช้หน้าทดสอบเหล่านี้ที่ฉันมีอยู่ ในhub.securevideo.com/Support/AutocompleteOnคุณควรเห็นคำแนะนำการเติมข้อความอัตโนมัติของ Chrome จากนั้นลองรายการเดียวกันในhub.securevideo.com/Support/AutocompleteOff คุณไม่ควรเห็นคำแนะนำการเติมข้อความอัตโนมัติของ Chrome ฉันเพิ่งทดสอบสิ่งนี้บน Chrome 45.0.2454.101m และ 46.0.2490.71m และทำงานได้ตามที่คาดหวังทั้งคู่
JT Taylor

อัปเดตอีกหนึ่งเรื่อง: ฉันเพิ่งได้รับการแจ้งเตือนจากทีม Chrome ว่าสิ่งนี้ได้รับการแก้ไขแล้ว ดังนั้นหวังว่าการแก้ปัญหานี้จะไม่จำเป็นอีกต่อไป!
JT Taylor

ดูโพสต์ของฉันด้านบน: "สิ่งนี้จะไม่ทำงานกับเขตข้อมูลรหัสผ่าน - สิ่งเหล่านี้ได้รับการจัดการแตกต่างกันไปใน Chrome ดูcode.google.com/p/chromium/issues/detail?id=468153เพื่อดูรายละเอียดเพิ่มเติม"
JT Taylor

46

สายไปงานเลี้ยงเล็ก ๆ น้อย ๆ แต่ดูเหมือนว่ามีความเข้าใจผิดเกี่ยวกับวิธีการที่autocompleteควรและไม่ควรทำงาน ตามข้อกำหนด HTML ตัวแทนผู้ใช้ (ในกรณีนี้ Chrome) สามารถแทนที่autocomplete:

https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute

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

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

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

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

ดังนั้นหลังจากประสบความยุ่งยากเช่นเดียวกับคนอื่นฉันพบวิธีแก้ปัญหาที่เหมาะกับฉัน มันคล้ายกันกับautocomplete="false"คำตอบ

บทความ Mozilla พูดถึงปัญหานี้อย่างแน่นอน:

https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion

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

ดังนั้นรหัสต่อไปนี้ควรใช้งานได้:

autocomplete="nope"

และควรทำดังนี้:

autocomplete="false"
autocomplete="foo"
autocomplete="bar"

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

สิ่งหนึ่งที่ควรกล่าวถึงก็คือเบราว์เซอร์จำนวนมากจะไม่สนใจautocompleteการตั้งค่าสำหรับฟิลด์การเข้าสู่ระบบ (ชื่อผู้ใช้และรหัสผ่าน) ในฐานะที่เป็นบทความ Mozilla ระบุ:

ด้วยเหตุนี้เบราว์เซอร์ที่ทันสมัยจำนวนมากจึงไม่สนับสนุนการเติมข้อความอัตโนมัติ = "ปิด" สำหรับช่องการเข้าสู่ระบบ

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

นี่คือพฤติกรรมใน Firefox (ตั้งแต่รุ่น 38), Google Chrome (ตั้งแต่ 34) และ Internet Explorer (ตั้งแต่รุ่น 11)

ในที่สุดข้อมูลเล็กน้อยว่าแอตทริบิวต์นั้นเป็นของformองค์ประกอบหรือinputองค์ประกอบ สเป็คอีกครั้งมีคำตอบ:

หากไม่ระบุแอตทริบิวต์การเติมข้อความอัตโนมัติค่าเริ่มต้นที่สอดคล้องกับสถานะของแอตทริบิวต์การเติมข้อความอัตโนมัติของเจ้าขององค์ประกอบจะถูกนำมาใช้แทน (ทั้ง "เปิด" หรือ "ปิด") หากไม่มีเจ้าของฟอร์มจะใช้ค่า "เปิด"

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

สรุป

หากต้องการปิดการใช้งานautocompleteทั้งรูปแบบ:

<form autocomplete="off" ...>

หรือถ้าคุณจำเป็นต้องทำแบบไดนามิก:

<form autocomplete="random-string" ...>

เมื่อต้องการปิดใช้งานautocompleteในแต่ละองค์ประกอบ (โดยไม่คำนึงถึงการตั้งค่าแบบฟอร์มที่มีอยู่หรือไม่)

<input autocomplete="off" ...>

หรือถ้าคุณจำเป็นต้องทำแบบไดนามิก:

<input autocomplete="random-string" ...>

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


1
2019 - ไม่ทำงาน เวอร์ชัน 76.0
user2060451

1
@ user2060451 - อะไรไม่ทำงาน ฉันเพิ่งทดสอบใน 76.0.3809.87 บน Windows และ Mac - ทั้งสองดำเนินการตามข้อมูลจำเพาะ ตามที่อธิบายไว้ข้างต้น หากคุณสามารถให้คำอธิบายมากกว่า "ไม่ทำงาน" ฉันอาจช่วยคุณได้
Hooligancat

1
ฉันเพียงแค่พยายามที่จะให้ (จากคอนโซลหลังจากทุกอย่างโหลดและในการตั้งค่าบนฝั่งเซิร์ฟเวอร์) สตริงสุ่มสำหรับการเติมข้อความอัตโนมัติขององค์ประกอบการป้อนข้อมูลมันไม่ทำงาน การเติมข้อความอัตโนมัติให้ = "ปิด" ในองค์ประกอบของฟอร์มยังไม่ได้ผล
Nuryagdy Mustapayev

37

การแก้ปัญหาในปัจจุบันคือการใช้ type="search"วิธีการแก้ปัญหาในปัจจุบันคือการใช้Google ไม่ใช้การป้อนอัตโนมัติกับอินพุตด้วยการค้นหาประเภทหนึ่ง

ดู: https://twitter.com/Paul_Kinlan/status/596613148985171968

อัปเดต 04/04/2016:ดูเหมือนว่าจะได้รับการแก้ไขแล้ว! ดูhttp://codereview.chromium.org/1473733008


7
นี่ไม่เป็นความจริงเหมือน v73
Miguel

29

Chrome เวอร์ชัน 34 ตอนนี้ไม่สนใจautocomplete=off, เห็นนี้

มีการถกเถียงกันมากมายว่าสิ่งนี้เป็นสิ่งที่ดีหรือไม่ดี? มุมมองของคุณคืออะไร?


7
ขออภัยสำหรับ downvote ... นี่ไม่ใช่ไซต์สนทนา (ลอง quora แทน) และคุณไม่ได้ให้คำตอบ ขอบคุณสำหรับลิงค์แม้ว่า
commonpike

25

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

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

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

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

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


2
แทนที่จะใช้ออนโฟกัสฉันใช้ setTimeout เพื่อล้างข้อมูลแบบอ่านอย่างเดียวดังนั้นผู้ใช้ของฉันไม่เห็นอินพุตถูกอ่านอย่างเดียวและไม่โฟกัส!
Hippyjim

23

คุณสามารถใช้ได้ autocomplete="new-password"

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

ทำงานใน:

  • Chrome: 53, 54, 55
  • Firefox: 48, 49, 50

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

23

TL; DR:บอก Chrome ว่านี่เป็นอินพุตรหัสผ่านใหม่และจะไม่ให้คำแนะนำเก่าแก่โดยอัตโนมัติ:

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

autocomplete="off" ไม่ทำงานเนื่องจากการตัดสินใจออกแบบ - การวิจัยจำนวนมากแสดงให้เห็นว่าผู้ใช้มีความยาวและยากที่จะแฮ็กรหัสผ่านหากพวกเขาสามารถเก็บไว้ในเบราว์เซอร์หรือผู้จัดการรหัสผ่าน

ข้อมูลจำเพาะสำหรับautocomplete มีการเปลี่ยนแปลงและตอนนี้สนับสนุนค่าต่าง ๆ เพื่อทำให้ฟอร์มการเข้าสู่ระบบง่ายต่อการทำให้สมบูรณ์อัตโนมัติ:

<!-- Auto fills with the username for the site, even though it's email format -->
<input type="email" name="email" autocomplete="username">

<!-- current-password will populate for the matched username input  -->
<input type="password" autocomplete="current-password" />

ถ้าคุณไม่ให้เหล่านี้ Chrome autocomplete="off"ยังคงพยายามที่จะคาดเดาและเมื่อมันไม่ได้ละเว้น

วิธีแก้ไขคือมีautocompleteค่าสำหรับรูปแบบการรีเซ็ตรหัสผ่านด้วย:

<label>Enter your old password:
    <input type="password" autocomplete="current-password" name="pass-old" />
</label>
<label>Enter your new password:
    <input type="password" autocomplete="new-password" name="pass-new" />
</label>
<label>Please repeat it to be sure:
    <input type="password" autocomplete="new-password" name="pass-repeat" />
</label>

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

Chrome ยังสามารถจัดการรหัสผ่านสำหรับไซต์โดยตรงโดยใช้API หนังสือรับรองซึ่งเป็นมาตรฐานและอาจมีการสนับสนุนสากลในที่สุด


5
ไม่ใช่เหตุผลที่น่าสนใจจริงๆ ความจริงที่ว่าผู้ใช้ต้องการบางสิ่งไม่ได้หมายความว่ามันเป็นความคิดที่ฉลาด เกือบจะไม่ดีเท่าการบอกว่าคุณจะอนุญาตให้ใช้รหัสผ่านอักขระเดียวในแอปพลิเคชันของคุณเนื่องจากผู้ใช้พบว่าสะดวกกว่า ในบางครั้งการรักษาความปลอดภัยสำคัญกว่าความสะดวกสบาย ...
แดเนียล Kotin

ฉันมีช่องชื่อ "ContactNoAlt" ที่ Chrome ยืนยันในการกรอก EmailAddress ต้องการเปิด / ปิดการเติมข้อความอัตโนมัติ แต่ต้องการการแก้ไขในระดับที่ใช้งานได้จริงเพราะ Chrome มีความยืดหยุ่น การเติมข้อความอัตโนมัติที่คมชัดยิ่งขึ้น = "ปิด" เป็นมาตรฐาน - ดังนั้นสิ่งที่ทำให้นักพัฒนาของ Chrome ดีจนพวกเขารู้สึกว่าพวกเขาสามารถเพิกเฉยต่อมาตรฐาน - บางทีวันหนึ่ง Chrome จะตัดสินว่า HTML อื่น ๆ ไม่สะดวก .... (นี่เป็นการเริ่มต้น รู้สึกเหมือน IE5 / 6 de-ja-vu)
dunxz

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

3
คำตอบนี้ (และพฤติกรรมของ Google) ละเว้นข้อเท็จจริงที่ว่าหนึ่งในเหตุผลสำคัญที่คุณอาจต้องการทำคือการใช้พฤติกรรมการเติมข้อความอัตโนมัติของคุณเอง (เช่นรายการจากฐานข้อมูล)
squarelogic.hayden

คุณกำลังพยายามปกป้องการตัดสินใจที่ไม่ดีอย่างชัดเจนจาก Chrome ฉันใช้นโยบายของ บริษัท ซึ่งฉันไม่สามารถเปลี่ยนแปลงได้ ดังนั้นตอนนี้ฉันต้องแทรกแฮ็คสำหรับโครเมี่ยม พวกเขากำลังทำงาน หากพวกเขาจะหยุดทำงาน บริษัท ของเราจะเปลี่ยนเบราว์เซอร์เริ่มต้นสำหรับพนักงาน ดังนั้นตอนนี้เรามีพฤติกรรมเดียวกัน แต่มีแฮ็กและอาจเป็นหน้าแตกในการอัพเกรดในอนาคต และเห็นคำตอบเหล่านี้ทั้งหมดที่นี่มี devs จำนวนมากที่ใช้แฮ็กเหล่านี้ โครเมี่ยมทำได้ดีมาก
Claudiu Creanga

23

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

<input name="name" type="text" autocomplete="rutjfkde">

หวังว่ามันจะช่วยให้คนอื่น


12

Autocomplete="Off" ไม่ทำงานอีกต่อไป

ลองใช้เพียงสตริงสุ่มแทน"Off"ตัวอย่างเช่นAutocomplete="NoAutocomplete"

ฉันหวังว่ามันจะช่วย


5
ไม่สามารถใช้งานได้ใน Chrome 73
just_user

10

เห็นโครเมี่ยมเพิกเฉยautocomplete="off"ฉันแก้มันด้วยวิธีที่โง่ซึ่งใช้ "การป้อนข้อมูลปลอม" เพื่อโกงโครเมี่ยมเพื่อเติมแทนการเติม "ของจริง"

ตัวอย่าง:

<input type="text" name="username" style="display:none" value="fake input" /> 
<input type="text" name="username" value="real input"/>

Chrome จะกรอกข้อมูล "การป้อนข้อมูลปลอม" และเมื่อส่งเซิร์ฟเวอร์จะใช้ค่า "ข้อมูลจริง"


10

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

ใส่รหัสนี้ในตอนต้นของแบบฟอร์มของคุณ

<div style="display: none;">
    <input type="text" autocomplete="new-password">
    <input type="password" autocomplete="new-password">
</div>

จากนั้นสำหรับฟิลด์รหัสผ่านจริงของคุณให้ใช้

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

แสดงความคิดเห็นคำตอบนี้ถ้ามันไม่ทำงานอีกต่อไปหรือถ้าคุณได้รับปัญหากับเบราว์เซอร์หรือรุ่นอื่น

อนุมัติเมื่อ:

  • Chrome: 49
  • Firefox: 44, 45
  • ขอบ: 25
  • Internet Explorer: 11

1
น่าเสียดาย Chrome รุ่น 49.0.2623.87 และมันใช้งานไม่ได้กับกล่องข้อความฉันยังคงเห็นการเติมข้อความอัตโนมัติปรากฏขึ้น
ตา

8

สำหรับทุกคนที่กำลังมองหาวิธีการแก้ปัญหานี้ในที่สุดฉันก็คิดออก

Chrome ทำตามการเติมข้อความอัตโนมัติ = "ปิด" หากหน้าเป็นหน้า HTML5 (ฉันใช้ XHTML)

ฉันแปลงหน้าเป็น HTML5 และปัญหาหายไป (facepalm)


6

เปลี่ยนแอตทริบิวต์ประเภทอินพุตเป็น type="search"เปลี่ยนประเภทการป้อนข้อมูลแอตทริบิวต์

Google ไม่ใช้การป้อนอัตโนมัติกับอินพุตด้วยการค้นหาประเภทหนึ่ง


1
ฉันจะ downvote: ทดสอบกับ chrome 60: วิธีนี้จะไม่ป้องกันการเติมข้อความอัตโนมัติ ..
boly38

6

จนถึงเมื่อสัปดาห์ที่แล้วโซลูชั่นทั้งสองด้านล่างดูเหมือนจะใช้งานได้กับ Chrome, IE และ Firefox แต่ด้วยการเปิดตัว Chrome รุ่น 48 (และยังอยู่ใน 49) จึงไม่ทำงานอีกต่อไป:

  1. ต่อไปนี้ที่ด้านบนของแบบฟอร์ม:
<input style="display:none" type="text" name="fakeUsername"/>
<input style="display:none" type="password" name="fakePassword"/>
  1. ต่อไปนี้ในองค์ประกอบการป้อนรหัสผ่าน:

    การเติมข้อความอัตโนมัติ = "ปิด"

ดังนั้นเพื่อแก้ไขปัญหานี้อย่างรวดเร็วในตอนแรกฉันพยายามใช้แฮ็คหลักของการตั้งค่าองค์ประกอบการป้อนรหัสผ่านเป็นครั้งแรกเพื่อปิดใช้งานจากนั้นใช้ setTimeout ในฟังก์ชั่นพร้อมเอกสารเพื่อเปิดใช้งานอีกครั้ง

setTimeout(function(){$('#PasswordData').prop('disabled', false);}, 50);

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

นี่คือลิงค์ในการอภิปรายนักพัฒนา Google Chrome: https://code.google.com/p/chromium/issues/detail?id=370363#c7


@JorgeSampayo ใช้ได้กับอินพุตรหัสผ่านเท่านั้น แต่ไม่สามารถใช้ป้อนข้อความได้
ตา

6

autocomplete=off ส่วนใหญ่จะถูกละเว้นในเบราว์เซอร์ที่ทันสมัย ​​- หลักเนื่องจากผู้จัดการรหัสผ่านเป็นต้น

คุณสามารถลองเพิ่มสิ่งนี้autocomplete="new-password"มันไม่ได้รองรับเบราว์เซอร์ทั้งหมด แต่มันทำงานได้ในบางส่วน


6

autocomplete="off"มักจะใช้งานได้ แต่ไม่เสมอไป ขึ้นอยู่กับnameฟิลด์อินพุต ชื่อเช่น "ที่อยู่", 'อีเมล', 'ชื่อ' - จะถูกเติมข้อความอัตโนมัติ (เบราว์เซอร์คิดว่าพวกเขาช่วยผู้ใช้) เมื่อฟิลด์เช่น "รหัส", "ขา" - จะไม่ถูกเติมข้อความอัตโนมัติ (หากautocomplete="off"ตั้งไว้)

ปัญหาของฉันคือ - การเติมข้อความอัตโนมัติยุ่งกับตัวช่วยที่อยู่ของ Google

ฉันแก้ไขโดยเปลี่ยนชื่อ

จาก

<input type="text" name="address" autocomplete="off">

ถึง

<input type="text" name="the_address" autocomplete="off">

ทดสอบในโครเมี่ยม 71


1
ฉันคิดว่านี่เป็นวิธีล่าสุดในการลบอัตโนมัติออก ทำงานใน 2020 พฤษภาคมบน chrome 81
NIKHIL CM


5

ไม่มีเงื่อนงำว่าทำไมสิ่งนี้ถึงใช้ได้ในกรณีของฉัน แต่ฉันใช้autocomplete="none"Chrome และ Chrome หยุดการแนะนำที่อยู่สำหรับช่องข้อความของฉัน


4

ตั้งแต่ Chrome 42 เป็นต้นไปไม่มีวิธีการแก้ไข / แฮ็กในชุดข้อความนี้ (เหมือน2015-05-21T12:50:23+00:00) ที่ปิดการเติมข้อความอัตโนมัติสำหรับแต่ละฟิลด์หรือทั้งฟอร์ม

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

<form action="/login" method="post">
    <input type="email" name="fake_email" style="display:none" aria-hidden="true">
    <input type="email" name="email">
    <input type="password" name="password">
    <input type="submit">
</form>

ข่าวดีก็คือว่าเนื่องจาก "ลายเซ็นฟอร์ม" เสียหายโดยสิ่งนี้จึงไม่มีการเติมข้อมูลในฟิลด์ให้โดยอัตโนมัติดังนั้นจึงไม่จำเป็นต้องใช้ JS เพื่อล้างข้อมูลฟิลด์ปลอมก่อนส่ง

คำตอบเก่า:

สิ่งเดียวที่ฉันพบว่ายังทำงานได้คือการแทรกเขตข้อมูลจำลองสองประเภทของอีเมลประเภทและรหัสผ่านก่อนฟิลด์จริง คุณสามารถตั้งค่าdisplay: noneให้ซ่อนได้ (ไม่ฉลาดพอที่จะเพิกเฉยกับฟิลด์เหล่านั้น):

<form action="/login" method="post">
    <input type="email" name="fake_email" style="display:none" aria-hidden="true">
    <input type="password" name="fake_password" style="display:none" aria-hidden="true">
    <input type="email" name="email">
    <input type="password" name="password">
    <input type="submit">
</form>

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

form.addEventListener('submit', function() {
    form.elements['fake_email'].value = '';
    form.elements['fake_password'].value = '';
});

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

(function(document) {

    function polyfillAutocomplete(nodes) {

        for(var i = 0, length = nodes.length; i < length; i++) {

            if(nodes[i].getAttribute('autocomplete') === 'off') {

                nodes[i].value = '';
            }
        }
    }

    setTimeout(function() {

        polyfillAutocomplete(document.getElementsByTagName('input'));
        polyfillAutocomplete(document.getElementsByTagName('textarea'));

    }, 1);

})(window.document);

4

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

ตัวอย่างเช่น

<input type="text" placeholder="name or email" autocomplete="off" />

ฉันได้มันมาโดยการเว้นวรรคความกว้างเป็นศูนย์ลงในคำในตัวยึดตำแหน่ง ไม่มีการเติมข้อความอัตโนมัติของ Chrome อีกต่อไป

<input type="text" placeholder="nam&#8203;e or emai&#8203;l" autocomplete="off" />

4

ใน Chrome 48+ ให้ใช้โซลูชันนี้:

  1. ใส่ฟิลด์ปลอมไว้ข้างหน้าฟิลด์จริง:

    <form autocomplete="off">
      <input name="fake_email"    class="visually-hidden" type="text">
      <input name="fake_password" class="visually-hidden" type="password">
    
      <input autocomplete="off" name="email"    type="text">
      <input autocomplete="off" name="password" type="password">
    </form>
  2. ซ่อนเขตข้อมูลปลอม:

    .visually-hidden {
      margin: -1px;
      padding: 0;
      width: 1px;
      height: 1px;
      overflow: hidden;
      clip: rect(0 0 0 0);
      clip: rect(0, 0, 0, 0);
      position: absolute;
    }
  3. คุณทำมัน!

นอกจากนี้ยังใช้งานได้กับรุ่นเก่ากว่า


@yivo ดูเหมือนว่าข้อแตกต่างระหว่าง urs และ og เท่านั้นคือ! แท็กที่สำคัญดังนั้นฉันจึงเพิ่มพวกเขา แต่ก็ยังไม่ทำงาน dropbox.com/s/24yaz6ut7ygkoql/…
Mike Purcell

@MikePurcell คุณไม่จำเป็นต้องautocomplete="off"อยู่ในformแท็ก และพยายามใส่อินพุตปลอมทันทีหลังจากformแท็ก
yivo

@Yivo: ลองใช้คำแนะนำของคุณทำงานได้ดีกับฟิลด์อีเมลอย่างไรก็ตามการดร็อปดาวน์อัตโนมัติยังคงเกิดขึ้นสำหรับฟิลด์รหัสผ่าน dropbox.com/s/5pm5hjtx1s7eqt3/…
Mike Purcell

3

หลังจาก chrome v. 34 การตั้งค่าautocomplete="off"ที่<form>แท็กไม่ทำงาน

ฉันทำการเปลี่ยนแปลงเพื่อหลีกเลี่ยงพฤติกรรมที่น่ารำคาญนี้:

  1. ลบ the nameและidของการป้อนรหัสผ่าน
  2. ใส่ชั้นเรียนในการป้อนข้อมูล (อดีต .: passwordInput)

(จนถึงตอนนี้ Chrome จะไม่ใส่รหัสผ่านที่บันทึกไว้ในอินพุต แต่ตอนนี้แบบฟอร์มเสีย)

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

var sI = $(".passwordInput")[0];
$(sI).attr("id", "password");
$(sI).attr("name", "password");

ในกรณีของฉันฉันเคย hav id="password" name="password"ในการป้อนรหัสผ่านดังนั้นฉันจึงนำพวกเขากลับมาก่อนที่จะเรียกการส่ง


3

หลังจากลองใช้โซลูชันทั้งหมดแล้วนี่คือสิ่งที่ดูเหมือนว่าจะใช้งานได้สำหรับรุ่น chrome: 45 โดยมีฟอร์มที่มีฟิลด์รหัสผ่าน:

 jQuery('document').ready(function(){
        //For disabling Chrome Autocomplete
        jQuery( ":text" ).attr('autocomplete','pre'+Math.random(0,100000000));
 });

3

ฉันเพิ่งอัปเดตเป็นChrome 49และโซลูชันของ Diogo Cidไม่ทำงานอีกต่อไป

ฉันทำการหลีกเลี่ยงวิธีอื่นในการซ่อนและลบเขตข้อมูลในเวลาทำการหลังจากโหลดหน้าเว็บแล้ว

ตอนนี้ Chrome ไม่สนใจวิธีแก้ปัญหาดั้งเดิมโดยใช้ข้อมูลรับรองในฟิลด์ที่แสดง เป็นครั้งแรกtype="password"และtype="text"ฟิลด์ก่อนหน้าดังนั้นฉันจึงซ่อนทั้งสองฟิลด์โดยใช้CSS visibility: hidden;

<!-- HTML -->
<form>
    <!-- Fake fields -->
    <input class="chromeHack-autocomplete">
    <input type="password" class="chromeHack-autocomplete">

    <input type="text" placeholder="e-mail" autocomplete="off" />
    <input type="password" placeholder="Password" autocomplete="off" />
</form>

<!-- CSS -->
.chromeHack-autocomplete {
    height: 0px !important;
    width: 0px !important;
    opacity: 0 !important;
    padding: 0 !important; margin: 0 !important;
}

<!--JavaScript (jQuery) -->
jQuery(window).load(function() {
    $(".chromeHack-autocomplete").delay(100).hide(0, function() {
        $(this).remove();
    });
});

ฉันรู้ว่ามันอาจจะดูไม่สวยงาม แต่มันใช้งานได้ดี


2

ฉันพบว่าวิธีนี้เหมาะสมที่สุด:

function clearChromeAutocomplete()
{
// not possible, let's try: 
if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) 
{
document.getElementById('adminForm').setAttribute('autocomplete', 'off'); 
setTimeout(function () {
        document.getElementById('adminForm').setAttribute('autocomplete', 'on'); 
}, 1500);
}
}

มันจะต้องโหลดหลังจากโดมพร้อมหรือหลังการแสดงผลแบบฟอร์ม


2

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

Chrome ละเว้นการเติมข้อความอัตโนมัติอย่างสมบูรณ์ = "ปิด" ทันที ในขณะที่แฮ็ค JS ทำงานได้ดีฉันพบวิธีง่าย ๆ ที่ใช้งานได้ในขณะที่เขียน:

ตั้งค่าของฟิลด์รหัสผ่านเป็นอักขระควบคุม 8 ( "\x08"ใน PHP หรือ&#8;ใน HTML) สิ่งนี้จะหยุด Chrome เติมฟิลด์โดยอัตโนมัติเนื่องจากมีค่า แต่ไม่มีการป้อนค่าจริงเนื่องจากนี่เป็นอักขระ Backspace

ใช่มันยังคงเป็นแฮ็ก แต่ใช้ได้สำหรับฉัน YMMV


ดูเหมือนจะไม่ทำงานใน Chrome 40
hood

ฉันคิดว่าพวกเขารับแฮ็กนี้และไม่สนใจอักขระควบคุมในค่าดังนั้นตอนนี้จึงประเมินว่าว่างเปล่า ดูคำตอบโดย @ ice-cream stackoverflow.com/a/16130452/752696สำหรับโซลูชันที่ถูกต้องและทันสมัย
spikyjt

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