"AutoComplete=Off" ne fonctionne pas sur le navigateur Google Chrome [dupliquer]

Cette question a déjà une réponse ici:

  • Chrome ignore autocomplete= "off" 42 réponses

je sais qu'il y a une question similaire sur Stackoverflow, mais aucune de la solution là-bas travaillé pour moi.

<form autocomplete="off" id="search_form" method="post" action="">
    <input autocomplete="off" type="text" />
</form>

Comme vous pouvez le voir, j'ai mis autocomplete=off sur le formulaire et le champ d'entrée, mais Google Chrome encore affiche cette liste d'auto-complétion. Cela ne se produit pas dans D'autres navigateurs comme Firefox et Safari.

toute autre solution autre que le putting autocomplete=off sur l'étiquette de formulaire??

16
demandé sur rink.attendant.6 2013-08-19 07:35:33

6 réponses

ceci est dû à une décision de design prise par Chrome (sans doute tout utilisateur de Chrome veut ce comportement).

la raison en est ce que Google appelle priorité des circonscriptions:

  1. L'utilisateur est roi! Ce qu'ils veulent plus.
  2. L'utilisateur veut utiliser un mot de passe ou le remplissage automatique du gestionnaire.
  3. l'application web dit qu'elle ne veut pas que les valeurs du formulaire soient sauvegardées.
  4. le le choix de l'utilisateur est plus important, donc les valeurs du formulaire sont conservées.

il y a des façons de travailler en rond, mais il est très probable que celles-ci seront corrigées dans les futures versions de Chrome car les développeurs de Chrome considèrent leur comportement comme correct et votre contournement comme un bogue.

même si votre solution de contournement fonctionne, elle crée un comportement déroutant pour l'utilisateur - il s'attend à ce que autofill fonctionne selon ses paramètres.

de nombreux utilisateurs ont déjà choisi d'ignorer app les paramètres autocomplete avec les plug-ins ou les scripts qui suppriment juste n'importe quel autocomplete=off dans la page - ils avaient déjà ce choix de toute façon.

vous êtes mieux de concevoir avec l'hypothèse que l'autocomplete peut fonctionner et la comptabilité pour cela.

personnellement je déteste quand les sites ne se souviennent pas de mon mot de passe et outrepassent ceux qui font avec les extensions de navigateur. Toutefois, je crée également des applications pour mon travail et il est considéré comme un risque de sécurité rappelant des mots de passe, comme un utilisateur pourrait laissez leur machine déverrouillée. Dans mon opinion personnelle les utilisateurs ne verrouillant pas leurs machines est un problème pour L'informatique locale, pas l'application, et l'informatique locale peut désactiver tout mot de passe autocomplete pour toutes les applications web si leurs utilisateurs ne peuvent pas être fiables.

malheureusement pour passer les contrôles de sécurité certaines applications doivent encore désactiver autocomplete, il y a des moyens de le faire, mais ils sont tous horribles. Le premier hack est de faire de la saisie du mot de passe de complètement nouveau:

<input type="hidden" name="password" id="realPassword" />
<input type="password" name="{randomly generated}" 
    onchange="$('#realPassword ').val($(this).val())" />

j'ai utilisé jQuery et inlined tout pour simplifier, mais cela devrait vous donner une idée du hack - aucun plug in ou navigateur peut auto-remplir une entrée avec un tout nouveau nom.

cette solution casse si vous construisez correctement ARIA et labels (car cela permet au navigateur/extension de trouver et de remplir automatiquement les entrées de l'étiquette).

donc l'option 2, aussi horrible, est d'attendre jusqu'à ce que l'autocomplete ait tiré et puis d'effacer le champ:

<input type="text" name="username" 
    onchange="window.setTimeout(function() { 
        $('#password').val('') 
    }, 100)" />
<input type="password" id="password" />

Comme je l'ai dit, méchant.

7
répondu Keith 2015-06-05 09:41:51

Il peut s'agir d'un bug sur Google Chrome, vous ne pouvez pas tricher en créant une entrée cachée. Auto complete feature obtiendra le premier texte d'entrée pour remplir les données.

<form autocomplete="off" id="search_form" method="post" action="">
    <input type="text" style="display:none" />
    <input autocomplete="off" type="text" />
</form>
6
répondu Bedonkey 2014-06-12 08:04:26

cela semble être un problème récurrent dans Google Chrome, bien que l'ajout autocomplete hors du formulaire travailler dans mon construire. Peut-être que dans les versions plus récentes, ce n'est plus le cas.

C'est un piratage. Donnez votre id, dites foo, et en JavaScript:

if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) {
    setTimeout(function () {
        document.getElementById('foo').autocomplete = 'off';
    }, 1);
}

Vérifier si cela fonctionne pour vous. Le seul inconvénient serait que pour ceux qui utilisent Chrome et avoir JavaScript désactivé, le champ serait toujours complété automatiquement.

1
répondu federicot 2017-05-23 11:46:40

autocomplete attribut est nouveau dans HTML5.

Puisque vous n'avez pas mentionné l' DOCTYPE, je pense que c'est la seule raison possible pourrait être cette. Pour de plus amples détails, consultez le MDN Comment Désactiver Forme d'auto-complétion.

essayez d'ajouter ce qui suit HTML5 DOCTYPE.

<!DOCTYPE html>

pour information: Dans certains navigateurs, vous pouvez avoir besoin pour activer un autocomplete fonction pour cela fonctionne (regardez sous "Préférences" dans le menu du navigateur).

Vous êtes l'utiliser correctement en mentionnant autocomplete l'attribut form l'élément. Cependant, vous n'avez pas besoin d'être mentionnés séparément pour input balise.

<form autocomplete="off" id="search_form" method="post" action="">
    <input type="text" />
</form>

mise à Jour: Ici vous pouvez trouver une liste des solutions dans autocomplete attribut et documents web using XHTML.

0
répondu Praveen 2013-08-19 04:44:59

si vous utilisez L'appel AJAX pour soumettre des données à backend. Après avoir terminé L'appel AJAX, les champs de mot de passe doivent être clairs. Alors l'invite de sauvegarde de mot de passe ne sera pas activée.

par exemple: $(#foo).val ("");

0
répondu Sirikumara 2014-05-23 04:27:09

essayez cette, travaillé pour moi, après vous embêter un peu

if ( navigator.userAgent.toLowerCase().indexOf('chrome') >= 0 ) {
    $('input[autocomplete="off"]').each( function(){
        var type = $(this).attr( 'type');
        $(this).attr( 'type', '_' + type );
        $(this).attr( 'type', type );
    });
}
0
répondu Luke Snowden 2014-06-02 12:54:14