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

当手动输入输入值时:
无论输入字段的类型如何,上面的代码都能正常工作并提醒正确的值。

当浏览器自动填充输入值时:
当输入字段为文本类型时,代码可以工作并提醒正确的值。如果是密码字段,它会提示空字符串!

这种行为是因为浏览器的安全策略吗?或者有什么可能的解决方法?我在 Chrome 浏览器中尝试过。

4

2 回答 2

2

这是一个有趣的问题,因为我相信您指的是 Chrome 中安全功能的副作用。

Chrome(可能还有其他浏览器)实际上可能不会使用自动填充的密码填充 DOM,因为恶意程序员可能会编写一个 JavaScript,在页面加载后试图从毫无戒心的受害者那里窃取自动填充的密码。

您很可能会要求用户单击提交按钮,然后才能访问该信息。

您可以强制表单在提交实际发生之前提交并检查值。如果可行,那么您可以通过在“onsubmit”中返回 false 来取消提交,并且您现在有了密码。

于 2016-02-19T08:04:50.497 回答
2
$(document).ready(function() {
  $("input")
      .blur(password)
      .trigger('blur');
});

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

演示

于 2016-02-19T07:58:10.647 回答