2014-03-25 79 views
6

我已經做了大量的研究這個問題,但我似乎無法找到任何解決我的問題。Safari保存的密碼覆蓋自動完成=「關閉」形式

我在我的表單標籤上設置了autocomplete =「off」,並且還有我的所有輸入標籤,但Safari繼續在頁面加載時將自動保存的密碼輸入到我的表單中,這導致了不希望的形式在我的JavaScript。

有什麼想法?我已經嘗試了各種各樣的黑客行爲,例如完全從代碼中刪除這些輸入字段,然後使用javascript和setTimeout在幾秒鐘後將它們插入到頁面中,但即使在Safari仍將其保存的密碼投入到我的輸入中。

我也嘗試在我的標籤中使用autocorrect =「off」和autocapitalize =「off」屬性。

我已經試過的Javascript黑客就像這樣(例如):

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

這樣在加載頁面上的每個輸入字段有這個屬性,然而野生動物園仍插入其保存的密碼到田間地頭。

是的,該網頁使用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。這是一個紅寶石應用程序。它將我的密碼插入:帳戶輸入和密碼輸入。我已經試過包裝我的「名字」部分:賬號輸入span標籤,像這樣:

User<span>n</span>ame 

,因爲「名」字是用於自動保存的密碼觸發的,但Safari瀏覽器仍然拋出其保存的密碼進入我的在嘗試解決此問題之後形成。

我將不勝感激一些新的提示,我可以嘗試。我發現迄今爲止這個問題的一切,人們只是說「使用自動完成=」關閉。「我是,但它不工作!

此外,我一直在測試這與Safari 6.1.2,但有在瀏覽器檢查的截圖中,我確實知道autocomplete =「off」屬性正在被添加到元素中:http://imgur.com/Sgqn7A4

+0

你確定['autocomplete =「off」'](http://stackoverflow.com/questions/3868299/is-autocomplete-off-compatible-with-all-modern-browsers)正在添加最終的HTML? – Blazemonger

+0

嗨,是的,當我檢查Safari或任何其他瀏覽器中的元素時,我發現元素上的autocomplete =「off」屬性正確。鏈接到瀏覽器的截圖檢查:http://imgur.com/Sgqn7A4 – user1138940

回答

6

看起來像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'); 
    }); 
}); 
+0

這似乎工作 – Dex

+0

在Firefox中,這可以防止存儲的密碼出現在頁面加載,但只要我點擊到其中一個字段,它把它的密碼。 – DiMono

-1

Safari已經存儲了數據。一旦瀏覽器存儲了數據,autocomplte =「off」不起作用。 也許你可以去首選項=>自動填寫=>編輯(用戶名和密碼),並刪除你已經放在那裏,然後再試一次。

希望它能幫助:)

0

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

在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更改類型爲字段是需要的文本。

這只是一個hack.If任何人有更好的解決方案,請發佈。