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