Сохраненные пароли Safari переопределяют autocomplete=off в формах

Я провел массу исследований по этой проблеме, но не могу найти ничего, что решило бы мою проблему.

У меня установлено autocomplete="off" в моем теге формы, а также во всех моих входных тегах, но Safari продолжает вводить автоматически сохраненные пароли в мою форму при загрузке страницы, что вызывает нежелательное событие нажатия клавиши в форме в моем JavaScript. .

Есть предположения? Я пробовал всевозможные хаки, такие как полное удаление этих полей ввода из кода, а затем использование javascript и setTimeout для вставки их на страницу через несколько секунд, но даже после этого Safari по-прежнему добавляет сохраненные пароли к моим вводам. .

Я также пробовал использовать атрибуты autocorrect="off" и autocapitalize="off" в моих тегах и .

Я пробовал такие хаки Javascript (пример):

$(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. Это рубиновое приложение. Он вставляет мои пароли в ввод :account и ввод :password. Я попытался обернуть часть имени моего ввода :account в теги span следующим образом:

User<span>n</span>ame

из-за того, что слово «имя» является триггером для автосохраненных паролей, но сафари по-прежнему выбрасывает сохраненные пароли в мою форму после этой попытки решить эту проблему.

Я был бы очень признателен за некоторые новые советы, которые я мог бы попробовать. Все, что я нашел до сих пор для этой проблемы, люди просто говорят «используйте автозаполнение = «выкл.» Я, но это не работает!

Кроме того, я тестировал это с Safari 6.1.2, но также подтвердил это странное поведение с более старыми и новыми версиями Safari. Ссылка на скриншот проверки браузера, поэтому я знаю, что атрибут autocomplete="off" правильно добавляется к элементам: http://imgur.com/Sgqn7A4


person user1138940    schedule 25.03.2014    source источник
comment
Вы уверены, что autocomplete="off" добавляется в окончательный HTML-код? ?   -  person Blazemonger    schedule 25.03.2014
comment
Привет, да, когда я проверяю элементы в Safari или любом другом браузере, я вижу, что атрибут autocomplete=off правильно указан в элементе. Ссылка на скриншот проверки браузера: imgur.com/Sgqn7A4   -  person user1138940    schedule 25.03.2014


Ответы (3)



В Mac Safari не учитывает autocomplete="off" в тегах. Он ищет комбинацию электронной почты и пароля и заполняет их автоматически.

Поскольку у меня была такая же проблема, когда у меня есть два поля.

<input type="text" name="email" id="email" value="" placeholder="Enter Email">
<input type="password" name="password" id="password" value="" placeholder="Enter Password">

Поскольку Safari ищет комбинацию текста и пароля, в этом случае для автоматического заполнения полей значениями, сохраненными в файлах cookie браузера.

Вам просто нужно сделать две вещи.

<input type="password" name="email" id="email" value="" placeholder="Enter Email" onfocus="this.type='text'">
  1. Измените тип поля электронной почты на пароль вместо текста при загрузке формы или страницы.
  2. Для события onfocus с типом изменения javascript поле должно быть текстовым, что является обязательным.

Это просто хак. Если у кого-то есть лучшее решение, напишите.

person Ankit    schedule 02.02.2016
comment
Круто!???? Вы спасли мой день! ???? - person Paul; 24.10.2020

Решение @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');
    // });
});
person DiMono    schedule 27.07.2015