खैर, पार्टी में थोड़ी देर हो गई, लेकिन ऐसा लगता है कि autocomplete
काम कैसे करना चाहिए और क्या नहीं करना चाहिए, इसके बारे में गलतफहमी है । HTML विनिर्देशों के अनुसार, उपयोगकर्ता एजेंट (इस मामले में Chrome) ओवरराइड कर सकता है autocomplete
:
https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute
एक उपयोगकर्ता एजेंट उपयोगकर्ता को किसी तत्व के ऑटोफिल क्षेत्र के नाम को ओवरराइड करने की अनुमति दे सकता है, उदाहरण के लिए इसे "ऑफ" से "ऑन" में बदलने के लिए और मान को लेखक के पेज की आपत्तियों के बावजूद याद रखने और पूर्वनिर्मित करने की अनुमति देने के लिए, या हमेशा "ऑफ" करने के लिए, कभी भी याद नहीं करना चाहिए। मान। हालांकि, उपयोगकर्ता एजेंटों को उपयोगकर्ताओं को स्वतःभरण फ़ील्ड नाम को "बंद" से "चालू" या अन्य मूल्यों पर ओवरराइड करने की अनुमति नहीं देनी चाहिए, क्योंकि उपयोगकर्ता के लिए महत्वपूर्ण सुरक्षा निहितार्थ हैं यदि सभी मान हमेशा याद रखे जाते हैं, भले ही साइट की प्राथमिकताओं की परवाह किए बिना।
इसलिए क्रोम के मामले में, डेवलपर्स ने अनिवार्य रूप से कहा है कि "हम उपयोगकर्ता को उनकी प्राथमिकताओं में यह तय करने के लिए छोड़ देंगे कि वे autocomplete
काम करना चाहते हैं या नहीं। यदि आप इसे नहीं चाहते हैं, तो इसे अपने ब्राउज़र में सक्षम न करें" ।
हालांकि, ऐसा प्रतीत होता है कि यह मेरी पसंद के लिए उनकी ओर से थोड़ा अति उत्साही है, लेकिन यह जिस तरह से है। विनिर्देश इस तरह के कदम के संभावित सुरक्षा निहितार्थ पर भी चर्चा करता है:
"ऑफ" कीवर्ड या तो इंगित करता है कि नियंत्रण का इनपुट डेटा विशेष रूप से संवेदनशील है (उदाहरण के लिए परमाणु हथियार के लिए सक्रियण कोड); या यह एक ऐसा मूल्य है जिसका कभी भी पुन: उपयोग नहीं किया जाएगा (उदाहरण के लिए बैंक लॉगिन के लिए एक बार-कुंजी) और उपयोगकर्ता को यूएए पर पूर्वनिर्धारित करने के लिए सक्षम होने के बजाय प्रत्येक बार डेटा को स्पष्ट रूप से दर्ज करना होगा। उसके लिए मूल्य; या यह कि दस्तावेज़ अपना स्वत: पूर्ण तंत्र प्रदान करता है और उपयोगकर्ता एजेंट को स्वत: पूर्णता मूल्य प्रदान नहीं करना चाहता है।
इसलिए सभी के समान निराशा का अनुभव करने के बाद, मुझे एक समाधान मिला जो मेरे लिए काम करता है। यह autocomplete="false"
उत्तरों के लिए नस में समान है।
एक मोज़िला लेख इस समस्या के बारे में बताता है:
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
लॉगिन फ़ील्ड (उपयोगकर्ता नाम और पासवर्ड) के लिए सेटिंग्स की उपेक्षा करेंगे । जैसा कि मोज़िला लेख बताता है:
इस कारण से, कई आधुनिक ब्राउज़र लॉगिन फ़ील्ड के लिए स्वत: पूर्ण = "बंद" का समर्थन नहीं करते हैं।
- यदि कोई साइट किसी फ़ॉर्म के लिए स्वत: पूर्ण = "बंद" सेट करती है, और फ़ॉर्म में उपयोगकर्ता नाम और पासवर्ड इनपुट फ़ील्ड शामिल हैं, तो ब्राउज़र अभी भी इस लॉगिन को याद रखने की पेशकश करेगा, और यदि उपयोगकर्ता सहमत है, तो ब्राउज़र अगली बार उन फ़ील्डों को स्वतः ही भर देगा। उपयोगकर्ता इस पृष्ठ पर जाता है।
- यदि कोई साइट उपयोगकर्ता नाम और पासवर्ड इनपुट फ़ील्ड के लिए स्वत: पूर्ण = "बंद" सेट करती है, तो ब्राउज़र अभी भी इस लॉगिन को याद रखने की पेशकश करेगा, और यदि उपयोगकर्ता सहमत हो जाता है, तो अगली बार जब उपयोगकर्ता इस पृष्ठ पर जाता है, तो ब्राउज़र उन फ़ील्डों को स्वतः सहेज देगा।
यह फ़ायरफ़ॉक्स (संस्करण 38 के बाद से), Google क्रोम (34 के बाद से), और इंटरनेट एक्सप्लोरर (संस्करण 11 के बाद से) में व्यवहार है।
अंत में इस बात की थोड़ी जानकारी कि क्या विशेषता form
तत्व या input
तत्व पर है। फिर से कल्पना का जवाब है:
यदि स्वत: पूर्ण विशेषता को छोड़ दिया जाता है, तो तत्व के स्वामी के स्वत: पूर्ण विशेषता की स्थिति के अनुरूप डिफ़ॉल्ट मान का उपयोग इसके बजाय (या तो "चालू" या "बंद") किया जाता है। यदि कोई प्रपत्र स्वामी नहीं है, तो "चालू" मान का उपयोग किया जाता है।
इसलिए। इसे फॉर्म पर रखकर सभी इनपुट फ़ील्ड पर लागू होना चाहिए। इसे एक व्यक्तिगत तत्व पर रखकर केवल उस तत्व पर लागू होना चाहिए (भले ही फॉर्म में कोई भी क्यों न हो)। यदि autocomplete
यह बिल्कुल निर्धारित नहीं है, तो यह चूक करता है on
।
सारांश
autocomplete
पूरे फॉर्म को निष्क्रिय करने के लिए :
<form autocomplete="off" ...>
या यदि आपको गतिशील रूप से इसे करने की आवश्यकता है:
<form autocomplete="random-string" ...>
autocomplete
किसी व्यक्तिगत तत्व को निष्क्रिय करने के लिए (चाहे फॉर्म सेटिंग मौजूद हो या न हो)
<input autocomplete="off" ...>
या यदि आपको गतिशील रूप से इसे करने की आवश्यकता है:
<input autocomplete="random-string" ...>
और याद रखें कि कुछ उपयोगकर्ता एजेंट आपकी सबसे कठिन लड़ी गई कोशिशों को भी अक्षम कर सकते हैं autocomplete
।