There are are few posts out there about this. You spend hours going through each answer, testing, reading comments, to find that there is no solution. What have you done in 2019, Chrome 76, that works?
相关问题
- Laravel Option Select - Default Issue
- HTML form is not sending $_POST values
- How to use Control.FromHandle?
- Google places autocomplete suggestion without coun
- Browsers render final comma of right-to-left (rtl)
相关文章
- Set the z-index value of a jQuery autocomplete inp
- Show a different value from an input that what wil
- How can I detect/watch “dirty-status” of an angula
- Is there a way to hide the new HTML5 spinbox contr
- Google Chrome Cache
- how to download a file on Chrome without auto rena
- Do all browsers on iOS use WKWebview or UIWebVIew?
- Why form submit opens new window/tab?
Disabling autofill: Set autocomplete attribute to a non-standard value, e.g. "nope".
Disabling autocomplete: The autocomplete function stores field names and their values when a form is submitted. There's (almost, see note 1) nothing sensible to be done to prevent storage except setting autocomplete to "off"/"false" (see why). Unfortunately that's not an option as it would enable autofill.
However it's possible to prevent retrieval of previous values by appending "!<nonce>" to the field names, where <nonce> is unique per page load (thus making field names unrecognizable).
On the client side this can be achieved by something like the following line of javascript (upon page load):
On the server side the part (if any) starting at "!" should be dropped from variable names (upon receiving post variables).
PS: this answer is an erratum to my earlier solution which is cleaner but wasn't sufficiently tested and - as gasman rightly pointed out - doesn't work for ordinary forms. This new solution was tested on Chrome Canary 79, does work, has relatively small impact and degrades nicely. Still, I feel guilty about publishing this hack and will feel even more guilty if I ever encounter it in real forms. It is *very* dirty.
Note 1: the only way to prevent storage that does make sense is to not set the name attribute in the first place (or to unset it), which necessitates intercepting the submit event to post the data "manually" (using XMLHttpRequest). Since the question is about forms and this strategy bypasses the traditional form-mechanism I've not elaborated on that approach. It's a nicer solution though.
Addendum: I decided to follow up on note 1 since I really dislike having a non-localized solution. Here's a localized version in vanilla JS that limits all impact to a single spot on the client side. Append it as a script to the document body or put it in the onload handler of the document.
This is the current working solution for Chrome 76.
As of Dec 6, 2019, with Chrome v78.x
Standard methods like
autocomplete="off"
are now working almost fine for the latest versions of Chrome. Except for this one:This thing is a real bummer because it doesn't only disrespect the standard/non-standard values like
"nope"
but there's literally no way to turn this off unless the input is not even remotely related with "addressy" terms.How on earth we could possibly display address-related input fields without using address-related words? Here comes the easiest solution ever.
Make sure the input element's
name
andid
don't include any address-related terms. Attributes likeid="input-street"
orname="destination-zip"
are big no-no.This is the most crucial part: If you are required to use any human-readable address terms for the text input or any of its adjacent elements, insert the "invisible" null character (
�
) between the letters of the said term. In this way, we can fool the AI capability of Chrome and bypass its strict autocompletion behavior.Some working examples:
And there you go. No more pesky menus for managing addresses, nor any regular autocompletion menus.
As gasman's answer explains, both the
autofill
andautocomplete
features must be disabled, which doesn't seem possible on a single input.The only working solution I've found is to setting
autocomplete="off"
on the input and add hidden fake inputs before the real input that foolautofill
, like so:* This answer is incorrect. I've published a better (but uglier) solution as a new answer and kept this answer since some parts may still be useful. If that's not how to deal with incorrect answers on stackoverflow, feel free to delete this one *
Consider using autocomplete=<nonce>, where <nonce> is unique per field and across page loads.
For example, if a field is the N-th field created after the page was requested at timestamp TS, its <nonce> can be chosen to be nope_<TS>_<N>.
Effect on autocomplete: since <nonce> is a custom value for autocomplete, chromium does not activate the autocomplete function (see form_structure.cc).
Effect on autofill: chromium recognizes a field by comparing its fingerprint with those of earlier encountered fields (see form_field_data.cc). If recognized it may offer a list of remembered values. The fingerprints contain the value of the autocomplete attribute. Since no two nonces are equal, no field is recognized.
Notes:
The terms autocomplete and autofill as used here are swapped compared to gasman's reply.
All fields should be created dynamically on the client-side (unless you are willing to not have the page cached).
I faced same issue. What I did was just put autocomplete=off. It doesn't work if autocomplete=nope. Not sure why. The autofill(autocomplete) developers are messing, there are lot of complaints but still those guys continue to keep their heads above canoning everybody.