Safari保存的密码在表单中覆盖autocomplete =“off”

我已经对这个问题做了大量的研究,但我似乎无法找到解决我问题的任何东西。

我在我的表单标签上设置了autocomplete =“off”,以及我的所有输入标签,但Safari继续在页面加载时将自动保存的密码输入到我的表单中,这导致我的JavaScript中的表单上出现了不需要的keydown事件。

有什么想法吗? 我已经尝试过各种各样的黑客攻击,比如完全从代码中删除那些输入字段,然后使用javascript和setTimeout在几秒钟后将它们插入到页面中,但即便在Safari之后仍然将其保存的密码输入到我的输入中。

我也尝试在my和tags中使用autocorrect =“off”和autocapitalize =“off”属性。

我尝试过像这样的Javascript黑客(例子):

$(function() { $('input').attr('autocomplete', 'off'); }); 

因此,加载页面上的每个输入字段都具有此属性,但Safari仍将其保存的密码插入字段中。

是的,该页面使用的是html5 doctype(因为我知道如果没有它,自动完成将不起作用)。

这是我的代码:

  - form_for @website, :html => {:class => 'fields', :autocomplete => 'off'}, :url => {:controller => 'signup', :action => 'connect'} do |form| %h3 Enter URL %ol.fields %li = form.label :url, "Website URL:" = form.text_field :url, :placeholder => "Website URL", :autocomplete => "off", :class => "website_url" %h3 Enter Credentials - form.fields_for :authentication do |aa| %ol.fields %li = aa.label :hostname, "SFTP/FTP Server:" = aa.text_field :hostname, :placeholder => "SFTP", :autocomplete => "off" %li = aa.label :account, "Username:" = aa.text_field :account, :placeholder => 'Username', :autocomplete => "off" %li = aa.label :password, "Password:" = aa.password_field :password, :placeholder => 'Password', :autocomplete => "off" 

以上是haml。 这是一个ruby应用程序。 它将我的密码插入:帐户输入和:密码输入。 我试过在span标签中包装my:account输入的’name’部分,如下所示:

 Username 

因为’name’这个词是自动保存密码的触发器,但是在尝试解决这个问题之后,safari仍然会将保存的密码丢入我的表单中。

我非常感谢我可以尝试的一些新技巧。 到目前为止我发现的所有问题,人们只是说“使用autocomplete =”关闭。“我,但它不起作用!

此外,我一直在使用Safari 6.1.2对此进行测试,但已经使用旧版本和新版本的Safari确认了这种奇怪的行为。 链接到浏览器检查的屏幕截图,所以我知道autocomplete =“off”属性正确添加到元素: http : //imgur.com/Sgqn7A4

看起来像Safari,其他人已经决定停止尊重这个属性。

https://discussions.apple.com/message/25149138#25149138

http://blog.gerv.net/2013/10/ie-11-ignoring-autocompleteoff

 // Override Safari, Chrome and IE11 decision to ignore autocomplete: off // on form you wish to skip autocomplete, change all password fields to type=private // requires jQuery $(function() { $('input[type="private"]').focus(function(e){ $(this).prop('type', 'password'); }); $('input[type="private"]').parents('form').submit(function(){ $(this).find('input[type="password"]').hide().prop('type', 'private'); }); }); 

@ t_itchy的解决方案在Firefox中失败,因为它最初会阻止输入值,但只要您给密码字段焦点,就会将密码添加到其中。 以下解决方案是从他编辑的,并操纵maxlength属性以防止密码出现。 此外,由于Firefox在模糊密码字段时表现奇怪,因此如果密码字段为空,它还会将密码字段恢复为私有模糊。

 // Override Safari, Chrome and IE11 decision to ignore autocomplete: off // on form you wish to skip autocomplete, change all password fields to type=private // requires jQuery // External function for removing maxlength restriction - apparently required function removemaxlength(me) { window.setTimeout(function() {me.prop('maxlength',100)},100); } $(function() { $('input[type="private"]').focus(function(e){ $(this).prop('maxlength',0).prop('type', 'password'); removemaxlength($(this)); }).blur(function(e){ // When leaving an empty field ONLY, revert to private if (!$(this).val()) $(this).prop('type', 'private'); }); // This appears unnecessary, left as comment for completeness // $('input[type="private"]').parents('form').submit(function(){ // $(this).find('input[type="password"]').hide().prop('type', 'private'); // }); }); 

在Mac Safari中,不会将autocomplete =“off”视为标记。 它会查找电子邮件和密码的组合并自动填充它们。

我有同样的问题,我有两个字段。

   

在这种情况下,safari会查找文本和密码的组合,以自动填充带有保存在浏览器cookie中的值的字段。

你只需要做两件事。

  
  1. 在表单加载或页面加载时,将电子邮件字段类型更改为密码而不是文本。
  2. 对于具有javascript更改类型的onfocus事件,字段为必需的文本。

这只是一个黑客。如果其他人有更好的解决方案,请发布。

Safari已经存储了数据。 一旦浏览器存储了数据,autocomplte =“off”就不起作用了。 也许您可以转到首选项=>自动填充=>编辑(用户名和密码)并删除已放置的内容,然后重试。

希望能帮助到你 :)