2016-02-19 3 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. Возможно, Chrome (и, возможно, другие браузеры) не заполняет DOM автоматически заполненным паролем, потому что вредоносный программист может написать JavaScript, который пытается украсть автоматически заполненные пароли от ничего не подозревающих жертв после загрузки страницы. Скорее всего, вам потребуется, чтобы пользователь нажал кнопку отправки, прежде чем вы сможете получить доступ к этой информации. Возможно, вы сможете заставить форму отправить и проверить значение прямо до фактического представления. Если это сработает, вы можете просто отменить подачу, вернув false в «onsubmit», и теперь у вас есть пароль.

+0

Передача форм с использованием JS также не является проблемой безопасности? –

+0

Я попытался воспроизвести поведение, которое Akhil Dixit испытывает безрезультатно. Я могу читать автозаполненные пароли из DOM с помощью jQuery и простого JavaScript. Я просто пытался предложить возможную причину несогласованности между нашими двумя браузерами (я также использую Chrome). – CzechErface

Смежные вопросы