Existe-t-il un moyen d'empêcher l'extension de navigateur LastPass de remplir un formulaire HTML avec un champ de saisie portant le nom "nom d'utilisateur"?
Ceci est un champ caché, je ne souhaite donc pas qu'un logiciel l'utilise pour ses besoins:
<input type="text" name="username" id="checkusername" maxlength="9" value="1999" class="longinput" style="display:none">
La solution ne doit pas ressembler à "renommer le champ de saisie".
Ajouter
data-lpignore="true"
dans un champ de saisie, la case grise LastPass [...] m'a été désactivée.
En provenance de LastPass.com
Deux conditions doivent être remplies:
autocomplete="off"
attributSettings > Advanced > Allow pages to disable autofill
Cela dépend donc à la fois de l'utilisateur et du développeur.
Ce qui a fonctionné pour moi, c'est d'avoir Word "-search-" dans l'id du formulaire, quelque chose comme <form id="affiliate-search-form">
- et lastpass n'ajoute pas ses éléments aux entrées du formulaire. Cela fonctionne avec quelque chose de plus simple comme <form id="search">
Mais ne fonctionne pas avec <form id="se1rch">
Je sais que je suis en retard à la fête ici, mais j’ai trouvé cela lorsque j’essayais d’empêcher Last-Last de ruiner mes formulaires. @takeshin est correct en ce que l'auto-complétion n'est pas suffisante. J'ai fini par faire le hack ci-dessous juste pour cacher le symbole. Pas joli, mais je me suis débarrassé de l'icône.
Si des développeurs de lastpass lisent ceci, donnez-nous s'il vous plaît un attribut à utiliser afin que nous n'ayons pas à recourir à des choses comme celle-là.
form[autocomplete="off"] input[type="text"] {
background-position: 150% 50% !important;
}
Je pense que lastpass honore le autocomplete="off"
attribut pour les entrées, mais je ne suis pas sûr à 100%.
EDIT Comme d'autres l'ont fait remarquer. cela ne fonctionne que si l'utilisateur a configuré son dernier passage pour honorer cela.
Pour moi travaillé soit type=search
qui est un peu égal à text
ou en utilisant role=note
.
Vous pouvez vérifier le LastPass-JavaScript mais il est énorme, vous pouvez peut-être trouver une solution de contournement, d'après ce que j'ai vu, ils ne vérifient que 4 types d'entrée, donc input type=search
serait une solution de contournement:
!c.form && ("text" == c.type || "password" == c.type || "url" == c.type || "email" == c.type) && lpIsVisible(c))
Aussi, ce sont les role
- mots-clés qu'ils semblent ignorer:
var c = b.getAttribute("role");
switch (c) {
case "navigation":
case "banner":
case "contentinfo":
case "note":
case "search":
case "seealso":
case "columnheader":
case "presentation":
case "toolbar":
case "directory":`
J'ai vérifié LastPass 'onloadwff.js
, préparez 26.960 lignes de code :)
Ajouter "recherche" à l'identifiant d'entrée
<input type="text" name="user" id="user-search"/>
Un peu tard dans la soirée, mais je viens d’y parvenir en modifiant le formulaire avec:
<form autocomplete="off" name="lastpass-disable-search">
J'imagine que ces imbéciles vont enfin penser qu'il s'agit d'un formulaire de recherche. Cela ne fonctionne pas pour les champs de mot de passe cependant! Lastpass ignore le champ de nom dans ce cas.
La seule façon dont j'ai réussi à faire cela est d'ajouter les éléments suivants directement en haut du formulaire:
<form autocomplete="off">
<div id="lp" ><input type="text" /><input type="password" /></div><script type="text/javascript">setTimeout(function(){document.getElementById('lp').style.display = 'none'},75);</script>
</form>
Il provoque un scintillement désagréable mais supprime le non-sens de la saisie automatique - bien qu'il affiche toujours le widget "générer un mot de passe". LastPass attend jusqu'à domready et vérifie ensuite s'il y a des champs de mot de passe visibles. Il est donc impossible de masquer ou de réduire les champs fictifs ci-dessus.
Ce code de style ES6 m'a été utile car il a ajouté data-lpignore à tous mes contrôles d'entrée:
const elements = document.getElementsByTagName("INPUT");
for (let element of elements) {
element.setAttribute("data-lpignore", "true");
}
Pour accéder à un contrôle INPUT spécifique, vous pouvez écrire quelque chose comme ceci:
document.getElementById('userInput').setAttribute("data-lpignore", "true");
Ou, vous pouvez le faire par nom de classe:
const elements = document.getElementsByClassName('no-last-pass');
for (let element of elements) {
element.setAttribute("data-lpignore", "true");
}
Essayé -search renommer mais pour une raison quelconque cela n'a pas fonctionné. Ce qui a fonctionné pour moi est le suivant:
Essayé et testé dans les dernières versions de FF et de Chrome.
Aucune des options ici (saisie semi-automatique, data-lpignore, etc.) n'a empêché LastPass de remplir automatiquement les champs de mon formulaire. J'ai adopté une approche plus résolue du problème et défini de manière asynchrone les attributs d'entrée name
via JavaScript. La fonction dépendante de jQuery suivante (appelée à partir du gestionnaire d'événements onsubmit du formulaire) a été efficace:
function setInputNames() {
$('#myForm input').each(function(idx, el) {
el = $(el);
if (el.attr('tmp-name')) {
el.attr('name', el.attr('tmp-name'));
}
});
}
$('#myForm').submit(setInputNames);
Dans le formulaire, j'ai simplement utilisé tmp-name
attributs à la place des attributs name
équivalents. Exemple:
<form id="myForm" method="post" action="/someUrl">
<input name="username" type="text">
<input tmp-name="password" type="password">
</form>
Je rencontrais toujours des difficultés avec ce qui précède à cause de AngularJS, car des champs de formulaire ayant des attributs name
permettaient à ngMessages de présenter correctement les messages d’erreur de validation de champ.
En fin de compte, la seule solution que je pouvais trouver pour empêcher LastPass de remplir les champs de mot de passe de mon formulaire de modification du mot de passe était la suivante:
input[type=password]
entièrement, ETÉtant donné que je dois pouvoir soumettre le formulaire normalement dans mon cas, j'ai toujours utilisé ma solution d'origine pour mettre à jour les noms de champ "juste à temps". Pour éviter d'utiliser des champs de saisie de mot de passe, j'ai trouvé cette solution fonctionnait très bien.