2011-06-27 17 views
17

Firefoxの自動入力機能を自動完了を無効にしないで無効にすることはできますか?Firefoxの自動入力を無効にする

私はこれを行うことができます知っている:

autocomplete="off" 

しかし、私はオートコンプリート、ちょうどオートフィルを無効にしたくありません。 Firefoxが

空であることを意味している私たちの隠されたフィールドの一部を移植され

これは、ユーザーがページをリフレッシュすると、ほとんどの問題です。フォームフィールドには、リフレッシュ前の値が再入力されます。これが問題となる例は、昔の学校のプレースホルダです。フィールドに値を設定し、送信時にフィールドを削除します。値はリフレッシュ時に再設定され、プレースホルダまたは使用値かどうかはわかりません。

+0

これは単なるFFのバグでしょうか? – jeef3

+0

ここに他の解決策がありますhttp://stackoverflow.com/questions/25019160/disable-browsers-form-inputs-prefill-autofill-feature-when-hitting-back-button –

+0

また、問題はFFでユーザー名を設定することです。ユーザー名は前のフィールドであると推測します。 (私はバージョン56にあります) – Savage

答えて

4

、これは助けしようとする実際の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; 
    } 
} 
+0

これは私が何をしているかに非常に近い答えだと思います。私たちもこれをwindow.unloadにフックできるのだろうかと思います。 – jeef3

2

Firefoxはフォーム上でのみautocomplete="off"を尊重し、個々の要素ではありません(IEとは異なります)。

もう1つの方法は、フィールド名をname="_u_sern_ame"のような奇妙なものに変更して、誰かの詳細の自動入力を無効にする場合は、フィールド認識システムを混乱させることです。

+2

ありがとうございますが、Firefoxは名前に関係なく古い値をキャッシュしているようです。ウェブアプリでは、これはかなり苦痛です。 – jeef3

+0

"alpha"、 "beta"、 "gamma"のようにプラセボを完成させるためにフィールド名を変更しようとしましたが、助けになりませんでした。 Firefoxはまだパスワードを自動入力します。 – Nayuki

+0

ええ、私は、入力タイプ "password"ではなく、 – Savage

1

This投稿(他の)自動入力される(他の)ダミーフィールドを使用することをお勧めします。あなたはそれらをcssで非表示にすることができます。しかし、これはおそらく他のものよりもパスワードフィールドでうまくいくでしょう。

+0

ええ、これはうまくいくように見えますが、私の問題はユーザー名/パスワードフィールドよりも広いです。 – jeef3

0

本当にFirefoxのバグの場合は、onSubmitイベントを使用して隠しフィールドをクリアすることができます。

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

例のJavascript機能:フォームのコードで問題は、ユーザーがリフレッシュしたときにFFがフィールドに移入されていることであるならば

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

実際にページを更新すると問題になります。だから、私たちは入力、隠されているか、それ以外の場合は、値がjavascriptを介して入力されている。ユーザーがページをリフレッシュすると、その入力はFirefoxによってpre-refreshの値で再入力されます。だから、提出が最終的に起こったとき、私たちはユーザーがそれを置いたのかFirefoxが行ったのか分かりません。 – jeef3

2

私は自分自身、この問題を抱えていました。マイクの答えは近いですが、私の意見では完璧ではありません。たとえvalue属性で設定しても、要素が空になります。

pageloadでは、次の操作を行います。小さな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はその後、input sおよびselect Sを選択し、それらを反復し、反復要素によってthisを交換します。
.getElementsByTagName('option')でオプションを選択します。

+0

jqueryが不足しています:) –

3

私は、ページ上のフォームのパスワードフィールドに同様の問題がありました。

Firefoxはちょうど自動的にパスワードを移入されたページ上のフォームタグでタイプ=パスワードを使用して、入力されたタグがある場合:

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

ここで私は、この特定の問題を解決するために使用されるコードです

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

これは前に働いていましたが、Firefoxは 'autocomplete =" off "'がフォームに存在していても、autofillingを使ってstupidiererを獲得しました!私は最近、これを '$(window).load(function(){$ {'input [type = password]')のval( '');});'で囲む必要があることを発見しました。 '$(document).ready()'は少し遅れてフォームがいっぱいになると早すぎました。 – billynoah

1

autocomplete='off'は、入力またはフォーム で

<input type='password' style='display: none;' /> 
を置くかどうかを防ぐことはできませんあなたの本当のパスワード入力の前に

例えば、実際のユーザ名フィールドと実際のパスワードフィールドの間に2つのダミーフィールドが私のために働い置く:

<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"> 

3

これは、ユーザー名のオートフィルだけでなく、パスワードのオートフィルを防ぎます。

autocomplete = "new-password"は明らかに完全には実装されていませんが、一部のブラウザでは役立ちます。私はそれがFireFoxに役立ったとは思っていませんが、機能がより広く採用されている場合の将来のバージョンのためにあります。

+0

確認済みです。それはなぜ機能するのですか?私はあなたのようにダミーフィールドを挟んでいませんでした。とにかく、私はページのレンダリングでフォームをクリアするJSメソッドよりもこれを好んでいます...ユーザーがフォームが一瞬いっぱいになってからクリアされるコンテンツのフラッシュを危険にさらします...いくつかの編集的および/そんなことはありません。 – MarsAndBack

+0

再キャップする:この方法は自動入力を無効にし、自動補完を維持しているようです。 – MarsAndBack

1

これは、実際にFirefoxでパスワードフィールドで動作します。私のために働い何

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

は、いくつかのケースでは

autocomplete="new-password" 
0

で、ブラウザは、オートコンプリート属性がある場合でも、自動補完値を示唆していきますオフに設定します。この予期しない動作は、開発者にとっては非常に困惑している可能性があります。実際には、自動補完を強制しないためのトリックは、たとえば、属性にランダムな文字列を割り当てることです:

autocomplete="nope" 

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

は、主要なブラウザにしようと、それが動作します!

関連する問題