use*_*940 6 javascript forms safari jquery autocomplete
我已经对这个问题做了大量的研究,但我似乎无法找到解决我问题的任何东西.
我在表单标签上设置了autocomplete ="off",以及我的所有输入标签,但Safari继续在页面加载时将自动保存的密码输入到我的表单中,这导致我的JavaScript中的表单上出现了不需要的keydown事件.
有什么想法吗?我已经尝试过各种各样的黑客攻击,比如完全从代码中删除那些输入字段,然后使用javascript和setTimeout在几秒钟后将它们插入到页面中,但即便在Safari之后仍然将其保存的密码输入到我的输入中.
我也尝试在my和tags中使用autocorrect ="off"和autocapitalize ="off"属性.
我尝试过像这样的Javascript黑客(例子):
$(function() {
$('input').attr('autocomplete', 'off');
});
Run Code Online (Sandbox Code Playgroud)
因此,加载页面上的每个输入字段都具有此属性,但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"
Run Code Online (Sandbox Code Playgroud)
以上是haml.这是一个红宝石应用程序.它将我的密码插入:帐户输入和:密码输入.我试过在span标签中包装my:account输入的'name'部分,如下所示:
User<span>n</span>ame
Run Code Online (Sandbox Code Playgroud)
因为'name'这个词是自动保存密码的触发器,但是在尝试解决这个问题后,safari仍会将保存的密码丢入我的表单中.
我非常感谢我可以尝试的一些新技巧.到目前为止我发现的所有问题,人们只是说"使用自动完成="关闭."我,但它不起作用!
此外,我一直在使用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');
});
});
Run Code Online (Sandbox Code Playgroud)