Las passwords guardadas de Safari están anulando autocomplete = "apagado" en formularios

He investigado mucho sobre este tema, pero parece que no puedo encontrar nada que resuelva mi problema.

He completado autocomplete = "apagado" en mi label de formulario y todas mis tags de input, pero Safari continúa ingresando passwords guardadas automáticamente en mi formulario al cargar la página, lo que está causando un evento de desactivación indeseada en el formulario en mi JavaScript .

¿Alguna idea? He intentado todo tipo de hacks como eliminar por completo esos campos de input del código, y luego usar javascript y setTimeout para insertlos en la página después de unos segundos, pero incluso después de eso, Safari aún arroja sus passwords guardadas a mis inputs. .

También he intentado utilizar los attributes autocorrect = "off" y autocapitalize = "off" en my tags.

He intentado hacks de Javascript como ese (ejemplo):

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

De modo que cada campo de input en la página en carga tiene este atributo y, sin embargo, Safari aún inserta sus passwords guardadas en los campos.

Sí, la página está utilizando html5 doctype (porque sé que la function autocomplete no funcionará sin ella).

Aquí está mi código:

  - 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 Cnetworkingentials - 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" 

Lo anterior está en haml. Es una aplicación de Ruby. Está insertando mis passwords en: input de count y input de contraseña. He intentado envolver la parte de "nombre" de mi: input de count en tags de span así:

 User<span>n</span>ame 

debido a que la palabra "nombre" es un desencadenante para las passwords guardadas automáticamente, aún Safari aún arroja sus passwords guardadas en mi formulario después de ese bash de resolver esto.

Agradecería mucho algunos consejos nuevos que podría probar. Todo lo que he encontrado hasta ahora para este problema, la gente simplemente dice "use autocomplete =" off. "Lo estoy, pero no está funcionando!

Además, he estado probando esto con Safari 6.1.2, pero también he confirmado este extraño comportamiento con las versiones más antiguas y más nuevas de Safari. Enlace a la captura de pantalla del browser inspeccionar, por lo que sé que el atributo autocomplete = "off" se está agregando correctamente a los elementos: http://imgur.com/Sgqn7A4

Parece Safari, y otros han decidido dejar de honrar este atributo.

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'); }); }); 

La solución de @t_itchy falla en Firefox, ya que inicialmente impide que se ingrese el valor, pero tan pronto como le da un foco de campo de contraseña, se le agrega la contraseña. La siguiente solución se edita desde la suya, y manipula la propiedad maxlength para evitar que la contraseña esté presente. Además, dado que Firefox se comporta de manera extraña al desenfocar un campo de contraseña, también revierte el campo de contraseña a privado en desenfoque si está vacío.

 // 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 requinetworking 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'); // }); }); 

En Mac Safari no respeta autocomplete = "off" en las tags. Busca la combinación de correo electrónico y contraseña y los llena automáticamente.

Como yo tenía el mismo problema donde tengo dos campos.

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

Como Safari busca una combinación de text y contraseña en este caso para autocomplete los campos con valores guardados en las cookies del browser.

Solo necesitas hacer dos cosas.

 <input type="password" name="email" id="email" value="" placeholder="Enter Email" onfocus="this.type='text'"> 
  1. Cambie el tipo de campo de correo electrónico a contraseña en lugar de text cuando se carga el formulario o carga la página.
  2. Para evento onfocus con javascript change type para que el campo sea text que se requiere.

Esto es solo un truco. Si alguien más tiene una mejor solución, publique.

Safari ya ha almacenado los datos. Una vez que el browser almacenó los datos, autocomplte = "off" realmente no funciona. Tal vez puede ir a la preference => Autocompletar => Editar (nombre de usuario y contraseña) y eliminar lo que ya ha puesto allí, y vuelva a intentarlo.

Espero eso ayude 🙂