【问题标题】:Disable Firefox's Auto-fill禁用 Firefox 的自动填充
【发布时间】:2011-09-23 04:44:15
【问题描述】:

是否可以在不禁用自动完成的情况下禁用 Firefox 的 自动填充 功能?

我知道我能做到:

autocomplete="off"

但我不想禁用自动完成,只是自动填充。

Firefox 正在填充我们的一些隐藏字段,这些字段本来应该是空的

这主要是用户刷新页面时出现的问题。表单字段会重新填充预刷新中的值。这是一个问题的一个例子是老式的占位符。我们用一个值填充该字段,并在提交时将其删除。该值在刷新时重新填充,我们不知道它是占位符还是使用值。

【问题讨论】:

  • 这里有其他解决方案stackoverflow.com/questions/25019160/…
  • 而问题是FF也设置了用户名,或者猜测用户名是前一个字段,这通常是完全不同的东西! (我在第 56 版)

标签: html firefox


【解决方案1】:

在实际用户名字段和实际密码字段之间放置两个虚拟字段对我有用,例如:

<input name = "Username" type="text" autocomplete="off">
<input name = "DummyUsername" type="text" style="display:none;">
<input name = "DummyPassword" type="password" style="display:none;">
<input name = "Password" type="password" autocomplete="new-password">

这阻止了用户名的自动填充以及密码的自动填充。

autocomplete="new-password" 显然没有完全实现,但可以帮助一些浏览器。我怀疑它对 FireFox 有帮助,但如果该功能被更广泛地采用,它会在未来的版本中提供。

【讨论】:

  • 确认工作。为什么它有效?顺便说一句,我没有像你那样把虚拟字段夹在中间。无论如何,我更喜欢这种在页面渲染上清除表单的 JS 方法......这可能会导致用户看到表单被填充片刻然后被清除的内容闪现......一些偏执和/或天真的用户会'不喜欢那样。
  • 重述:此方法似乎禁用自动填充并保持自动完成。
  • 工作中,谢谢!!和 MarsAndBack 一样:我先放置 虚拟字段,然后放置真实字段
【解决方案2】:

如果问题是 FF 在用户刷新时填充字段,这实际上是 Firefox 的一个功能,它试图在用户意外刷新的情况下帮助用户,这样他们就不会丢失他们输入的任何内容。我不认为你可以用 HTML 覆盖它。您可以使用 JavaScript 在页面加载时清除/重置所有相关的表单值。如果表单上的 form.reset() 不起作用,您将不得不遍历表单元素并像这样清除它们:

for (i = 0; i < frm_elements.length; i++)
{
    field_type = frm_elements[i].type.toLowerCase();
    switch (field_type)
    {
    case "text":
    case "password":
    case "textarea":
    case "hidden":
        frm_elements[i].value = "";
        break;
    case "radio":
    case "checkbox":
        if (frm_elements[i].checked)
        {
            frm_elements[i].checked = false;
        }
        break;
    case "select-one":
    case "select-multi":
        frm_elements[i].selectedIndex = -1;
        break;
    default:
        break;
    }
}

【讨论】:

  • 我认为这是我所追求的非常接近的答案。我想知道我们是否也可以将它挂接到 window.unload。
【解决方案3】:

Firefox 仅支持表单上的autocomplete="off",而不支持单个元素(与 IE 不同)。

另一个选项是将字段名称更改为 name="_u_sern_ame" 之类的奇怪名称,以便在您想要禁用某人详细信息的自动填充时混淆任何字段识别系统。

【讨论】:

  • 谢谢,但无论名称如何,Firefox 似乎都在缓存旧值。在网络应用中,这是相当痛苦的。
  • 我尝试更改字段名称以完成安慰剂,如“alpha”、“beta”、“gamma”,但没有帮助。 Firefox 仍然会自动填充密码。
  • 是的,我认为它的工作是输入类型“密码”,而不是名称
  • autocomplete="off" 不是 OP 所要求的。他想要自动填充,但想要禁用自动填充。自动填充和自动完成是两个不同的东西。
【解决方案4】:

我在页面上的表单中遇到了类似的密码字段问题。

如果页面上的表单标签中有 type = password 的输入标签,Firefox 只是自动填充密码:

<form>
    <input type='password' />
</form>

这是我用来解决这个特定问题的代码:

$('input[type=password]').val('')

【讨论】:

  • 这在以前有效,但即使autocomplete="off" 出现在表单中,Firefox 的自动填充功能也变得更加愚蠢!我最近发现我必须将其附在$(window).load(function(){ $('input[type=password]').val(''); }); 中。 $(document).ready() 甚至还为时过早,因为表单在稍有延迟后正在填写。
【解决方案5】:

我自己也遇到过这个问题。 Mike 的回答很接近,但在我看来并不完美:它会清空元素,即使 value 属性可能想要设置它。

在页面加载时,我执行以下操作。它只使用了一点 jQuery。

// Reset input elements to their HTML attributes (value, checked)
$("input").each(function(){
    // match checkbox and radiobox checked state with the attribute
    if((this.getAttribute('checked')==null) == this.checked)
        this.checked = !this.checked;
    // reset value for anything else
    else this.value = this.getAttribute('value')||'';
});

// Select the option that is set by the HTML attribute (selected)
$("select").each(function(){
    var opts = $("option",this), selected = 0;
    for(var i=0; i<opts.length; i++) 
        if(opts[i].getAttribute('selected')!==null) 
            selected = i;

    this.selectedIndex = selected||0;
}); 


没有 jQuery?

使用document.getElementsByTagName 选择inputs 和selects,然后迭代它们并用迭代的元素替换this
使用.getElementsByTagName('option') 选择选项。

【讨论】:

  • 没有足够的 jquery :)
【解决方案6】:

autocomplete='off' 不会阻止无论是输入还是表单 放一个

<input type='password' style='display: none;' />

在您输入真实密码之前。

【讨论】:

    【解决方案7】:

    对我有用的是

    autocomplete="new-password"
    

    【讨论】:

      【解决方案8】:

      在某些情况下,即使自动完成属性设置为关闭,浏览器也会不断提示自动完成值。这种意想不到的行为可能会让开发人员感到非常困惑。真正强制不自动完成的技巧是为属性分配一个随机字符串,例如:

      autocomplete="nope"
      

      https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion

      在主流浏览器上试过,效果很好!

      【讨论】:

        【解决方案9】:

        This 帖子建议使用(其他)将自动填充的虚拟字段,您可以使用 css 隐藏那些。但这可能比其他密码字段更适用于密码字段。

        【讨论】:

        • 是的,看起来这可行,但问题(对我而言)不仅仅是用户名/密码字段。
        【解决方案10】:

        这实际上适用于 FireFox 中的密码字段:

        $(window).load(function(){
            $('#pass').val('');
        });
        

        【讨论】:

          【解决方案11】:

          如果确实是 Firefox 错误,您可以使用 onSubmit 事件清除隐藏字段。表单代码中:

          <form onSubmit="clearFieldsIfPopulated(this)">
            <input type="hidden" name="field1"> <input type="submit">
          </form>
          

          示例 Javascript 函数:

          function clearFieldsIfPopulated(form) {
            if (form.field1.value != "") {
              form.field1.value == "";
            }
          }
          

          【讨论】:

          • 刷新页面其实是有问题的。所以,我们有一个输入,隐藏的或其他的,可能通过 javascript 填充了一个值。如果用户刷新页面,Firefox 会使用 pre-refresh 值重新填充该输入。所以当提交最终发生时,我们不知道是用户把它放在那里还是 Firefox 放在那里。
          猜你喜欢
          • 1970-01-01
          • 2013-03-22
          • 2019-04-10
          • 2018-07-16
          相关资源
          最近更新 更多