2016-02-19 8 views
6
var inputs = document.getElementsByTagName('input'); 
for (var i = 0; i < inputs.length; i++) { 
    inputs[i].onfocus = foo; 
} 
function foo(){ 
    alert(this.value); 
} 

入力値を手動で入力する:
コード作品や警告正しい値を超えると関係なく、入力フィールドのタイプの。

入力値がブラウザで自動入力された場合:
入力フィールドがテキストの場合、コードは正しく機能し、警告を出します。パスワードフィールドの場合、空の文字列を警告します!

ブラウザのセキュリティポリシーのためにこの現象はありますか?または可能な回避策がありますか?私はChromeブラウザで試しました。JavaScriptで自動入力されたパスワードボックスの値を取得する方法はありますか?

+0

あなたが提供したページによって事前設定された「値」属性にアクセスするのに問題があるかどうか、またはChromeが入力をパスワードマネージャーにどのように事前入力しているかについてお聞かせください。後者の場合は、私の答えを見てください。 – CzechErface

+0

'value'属性が事前設定されている場合は問題ありません。問題は、ブラウザが入力ボックスをパスワードマネージャで自動的に入力するときです(このサイトのパスワードを保存すると言うとき)。この場合、ブラウザがDOM要素に値属性を挿入しないと、基本的には何が行われますか?あなたの答えはチェコに感謝し、それは私がこれを解決する方法はないようだ! –

答えて

2
$(document).ready(function() { 
    $("input") 
     .blur(password) 
     .trigger('blur'); 
}); 

function password() { 
    alert($(this).val()) 
} 

DEMO

+0

ここではjQueryは必要ありません:https://jsfiddle.net/7hn3ojcw/3/ @CzechErfaceはとにかくお金になっていると思います。ユーザーが入力した入力にアクセスするとは思えません(例のように)が問題ですが、ブラウザに入力済みです。 – ste2425

+1

@ ste2425実際には、入力済みのpwdフィールドでも動作し、Chromeのデフォルトのパスワードフィラーとlastpass拡張子の両方でテストしただけで、両方の入力値に簡単にアクセスできました。 –

+0

@ArturasTamulatisはネイティブまたはjQueryと同じですか?いずれにせよ、私は私のコメントを取り戻す、私はそれを編集するだろうが、5分以上されている。 – ste2425

1

私はあなたがChromeのセキュリティ機能の副作用に言及していることを信じているので、これは興味深い質問です。悪意のあるプログラマは、ページが読み込まれると疑わしい犠牲者から自動入力されたパスワードを盗もうとするJavaScriptを作成する可能性があるため、Chromeには実際には自動入力されたパスワードがDOMに埋め込まれないことがあります。その情報にアクセスするには、ユーザーが送信ボタンをクリックする必要があります。提出が実際に行われる直前にフォームに提出して値を確認するように強制することができます。それがうまくいけば、 "onsubmit"でfalseを返すだけで、投稿を取り消すことができます。そして今度はパスワードを持っています。

+0

JSを使用してフォームを送信することはセキュリティ上の問題ではありませんか? –

+0

Akhil Dixitが経験している動作を無駄に複製しようとしました。私は、jQueryと単なるJavaScriptの両方で、DOMから自動入力されたパスワードを読み取ることができます。私は、2つのブラウザ間の不一致の理由を提示しようとしていました(私もChromeを使用しています)。 – CzechErface

関連する問題