有没有办法防止 LastPass 浏览器扩展使用名为“用户名”的输入字段填写基于 HTML 的表单?
这是一个隐藏字段,因此我不希望任何软件将此字段用于其目的:
<input type="text" name="username" id="checkusername" maxlength="9" value="1999" class="longinput" style="display:none">
解决方案不应该像“重命名输入字段”。
必须满足两个条件:
autocomplete="off"
属性Settings > Advanced > Allow pages to disable autofill
Account Options > Extension Preferences > Advanced > Respect AutoComplete=off: allow websites to disable Autofill
所以这取决于用户和开发者。
对我有用的是在表单的 id 中包含单词“-search-”,例如<form id="affiliate-search-form">
- 并且 lastpass 不会将其元素添加到表单输入中。它适用于更简单的东西,<form id="search">
但不适用于<form id="se1rch">
我知道我在这里聚会迟到了,但是当我试图阻止 lastpass 破坏我的表格时,我发现了这一点。@takeshin 是正确的,因为自动完成是不够的。我最终做了下面的黑客只是为了隐藏符号。不漂亮,但我摆脱了图标。
如果有任何 lastpass 开发人员正在阅读本文,请给我们一个要使用的属性,这样我们就不必求助于这样的东西了。
form[autocomplete="off"] input[type="text"] {
background-position: 150% 50% !important;
}
我认为lastpass 尊重autocomplete="off"
输入的属性,但我不是 100% 确定。
编辑 正如其他人指出的那样。这仅在用户已配置最后一次传递以兑现这一点时才有效。
对我来说type=search
,工作有点等于text
或使用role=note
.
您可以检查 LastPass-JavaScript,但它很大,也许您可以在那里找到一些解决方法,据我所见,他们只检查 4 种输入类型,因此input type=search
是一种解决方法:
!c.form && ("text" == c.type || "password" == c.type || "url" == c.type || "email" == c.type) && lpIsVisible(c))
这些也是role
他们似乎忽略的-keywords:
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":`
我检查了 LastPass' onloadwff.js
,准备 26.960 行代码 :)
将“搜索”添加到输入 ID
<input type="text" name="user" id="user-search"/>
派对迟到了,但我刚刚通过修改表单实现了这一点:
<form autocomplete="off" name="lastpass-disable-search">
我猜这个傻瓜最后认为这是一个搜索表单。但是,这不适用于密码字段!在这种情况下,Lastpass 会忽略名称字段。
我设法做到这一点的唯一方法是直接在表单顶部添加以下内容:
<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>
它会导致令人讨厌的闪烁,但确实删除了自动填充废话 - 尽管它仍然显示“生成密码”小部件。LastPass 等到 domready 然后检查是否有任何可见的密码字段,因此无法隐藏或缩小上面的模拟字段。
这个 ES6 风格的代码对我很有帮助,因为它向我的所有输入控件添加了data-lpignore :
const elements = document.getElementsByTagName("INPUT");
for (let element of elements) {
element.setAttribute("data-lpignore", "true");
}
要访问特定的 INPUT 控件,可以编写如下内容:
document.getElementById('userInput').setAttribute("data-lpignore", "true");
或者,您可以通过类名来完成:
const elements = document.getElementsByClassName('no-last-pass');
for (let element of elements) {
element.setAttribute("data-lpignore", "true");
}
对于 Lastpass 的最新 2019 年 10 月错误版本,这个简单的修复似乎是最好的。
添加
type="search"
到您的输入。
lastpass 例程检查type
属性以确定如何处理其自动填充,并且它对type
“搜索”的 html5 不执行任何操作。这个修复有点hacky,但它是一行更改,当他们修复错误的脚本时可以轻松删除。
注意:执行此操作后,如果某些浏览器选择了该type
属性,您的输入可能会出现不同的样式。-webkit-appearance
如果您观察到这一点,您可以通过设置浏览器特定的 CSS 属性和输入-moz-appearance
来防止它发生'none'
。
不幸的是,这里的所有选项(自动完成、data-lpignore 等)都无法阻止 LastPass 自动填写我的表单字段。我对这个问题采取了更加大刀阔斧的方法,name
而是通过 JavaScript 异步设置输入属性。以下依赖于 jQuery 的函数(从表单的 onsubmit 事件处理程序调用)起到了作用:
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);
在表单中,我只是使用tmp-name
属性来代替等价的name
属性。例子:
<form id="myForm" method="post" action="/someUrl">
<input name="username" type="text">
<input tmp-name="password" type="password">
</form>
name
由于 AngularJS 取决于具有属性的表单字段,以便 ngMessages 正确显示字段验证错误消息,我仍然遇到了上述问题。
最终,我能找到的防止 LastPass 在我的密码更改表单上填写密码字段的唯一解决方案是:
input[type=password]
完全使用,并且由于我需要能够在我的情况下正常提交表单,我仍然使用我原来的解决方案来“及时”更新字段名称。为了避免使用密码输入字段,我发现这个解决方案效果很好。
这对我有用,可以防止 lastpass 在 Chrome 中填充剃刀 @Html.EditorFor 框:
单击工具栏中的活动 LastPass 图标,然后转到帐户选项 > 扩展首选项。
在此屏幕上选中“不要覆盖已填写的字段”(在底部)
接下来,单击左侧的“高级”。
在此屏幕上选中“尊重自动完成=关闭:允许网站禁用自动填充”。
我不需要在我的 ASP cshtml 表单中做任何特别的事情,但我在 @Html.EditorFor 框的表单中确实有一个默认值。
我希望这对某人有所帮助和工作。我在网上找不到关于这个问题的任何 Razor 特定帮助,所以我想我会添加这个,因为我在上面的链接和贡献的帮助下找到了它。
对于偶然发现这一点的人 -autocomplete="new-password"
密码字段会阻止 LastPass 填写密码,这与data-lpignore="true"
完全禁用它相结合
2021 年 11 月更新
我注意到所有 LastPass 小部件都包装在 css-1obar3y 类的 div 中。
div.css-1obar3y {
display: none!important;
}
非常适合我
尝试了 -search 重命名,但由于某种原因不起作用。对我有用的是以下内容:
在最新版本的 FF 和 Chrome 中进行了尝试和测试。
type="hidden" autocomplete="off"
将此添加到我的输入中对我有用。(输入也有visibility: hidden
css)。