javascript - Safari 保存的密码覆盖表单中的自动完成 ="off"

标签 javascript jquery forms autocomplete safari

我已经对这个问题进行了大量研究,但我似乎找不到任何可以解决我的问题的方法。

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

有什么想法吗?我尝试了各种技巧,例如完全从代码中删除这些输入字段,然后在几秒钟后使用 javascript 和 setTimeout 将它们插入页面,但即使在那之后 Safari 仍然将其保存的密码扔到我的输入中.

我还尝试在我的和标签中使用 autocorrect="off"和 autocapitalize="off"属性。

我试过这样的 Javascript hacks(示例):

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

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

是的,该页面使用的是 html5 文档类型(因为我知道没有它自动完成将无法工作)。

这是我的代码:

  - 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 应用程序。它将我的密码插入到 :account 输入和 :password 输入中。我试过将我的 :account 输入的“名称”部分包装在 span 标签中,如下所示:

User<span>n</span>ame

由于“名称”一词是自动保存密码的触发器,但在尝试解决此问题后,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');
  });
});

关于javascript - Safari 保存的密码覆盖表单中的自动完成 ="off",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22636673/

相关文章:

javascript - 触发警报的 JS (Jquery) .keydown 事件

jquery - 如何将变量绑定(bind)到 jQuery getJSON 调用?

javascript - HTML 表格中的值小计

php - 允许用户使用 jquery 创建并提交最多 5 个文本框,并在 php 中将它们解析为一个数组?

HTML: Bootstrap 模式中的自动填充表单

javascript - 检查输入是否为空或有文本而不是数字

javascript - 无需回调即可使用 Notification API 的正确方法

javascript - 在 socket.io 中获取聊天室中有多少人

javascript getElementById 开头

javascript - 当相应的表单值为空时获取 HTML 表单元素。?