【问题标题】:How to detect when browser places saved password?如何检测浏览器何时放置保存的密码?
【发布时间】:2012-11-02 23:06:24
【问题描述】:

我正在尝试检测浏览器何时将保存的用户名和密码放入输入字段。我查看了 this post ,但我没有更改此功能的选项,并且其他解决方案不起作用。

基本上,如果加载时字段为空,我会禁用登录按钮。但是当浏览器填写输入时,它不会启用按钮。我正在尝试找出如何查看它是否会发生变化。

我正在使用 jQuery 和 JS。

我尝试过 .change、on .ready、on .load 等等。它似乎发生在 .load 事件之后。

有人知道这个问题的解决方案吗?我想避免使用任何类型的超时。

【问题讨论】:

  • 您是在谈论某些浏览器显示的“您要...记住此密码”吗?没有办法知道用户在那里点击了什么。但是,如果浏览器自动将值放在字段中,您可以检测到它不是空的。当然,由于浏览器的兼容性以及任何用户想要关闭 Javascript 的能力,这可能会出现严重错误。
  • 填写登录数据后浏览器不会自动提交表单吗?
  • 浏览器填充字段时是否会触发更改事件?只需将禁用按钮更改为该事件的启用按钮?
  • 我正在寻找当浏览器根据用户过去是否选择过“你想记住这个密码”来预填充字段时触发的事件。 @urbananimal,不幸的是 onchange 没有触发

标签: javascript jquery cross-browser


【解决方案1】:

我认为没有办法检测浏览器是否具有预先填充字段的内置功能。

如果有东西,您可以使用启用按钮的计时器来解决问题。 像这样的:

setInterval(function (){
 if($("#username").val()!=""){
  $("#loginbutton").attr("enabled","enabled"); 
 }
},1000)

【讨论】:

  • 这比一次性检查要好。有些钱包会先要求用户输入密码,因此可能需要一些时间。
  • 这确实有效 - 但是,需要这样的功能令人失望!我希望有一个可以听的事件可以解决这个问题,而无需求助于这样的计时功能。不过感谢您的解决方案!
  • 视情况而定,默认值可能与“”不同。如果是这种情况,您可以使用if( $('#id').val() != $('#id').prop('defaultValue') ){ /*do something*/ }
  • 这不适用于 Chrome,因为这些字段只是伪填充
【解决方案2】:

关键是该字段将被填充,而该字段中没有任何按键。

因此,如果您在输入字段上捕获 .keypress 以了解是否按下了某个键,那么如果您提交表单并发现尽管有一个值但没有按键 - 那么您可以在一定程度上确定浏览器预先填充了它。

如果您想在提交之前知道(在页面加载后不久),您需要运行一个间隔检查,看看值是否在没有按键的情况下发生了变化。

正如@japrescott 指出的那样,您可能还需要检查 .focus 以防用户在其中粘贴值。

【讨论】:

  • 我认为他是在浏览器预填充时触发的“事件”之后。事实上,我的印象是他/她不知道浏览器是否会预先填充,以便他/她可以加载不同的按钮图像......
  • 更新了答案。相同的想法,尽管没有触发按键事件,但价值差异。
  • 输入可以通过鼠标->粘贴发生,所以还要检查focus!
【解决方案3】:

尚未对此进行测试,但您不能简单地将每个字段的默认值与页面加载后(或页面加载后 0.2 秒,如果这是一个问题)的每个字段的值进行比较?

【讨论】:

    【解决方案4】:

    拍摄Jquery .live() function

    $('.element').live('load', function(){
      enableLogin();
    });
    

    【讨论】:

    • 我已经尝试过这个解决方案,但它不起作用。不过感谢您的意见!
    猜你喜欢
    • 2019-12-30
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2015-06-29
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多