Làm thế nào để bạn vô hiệu hóa Trình duyệt tự động hoàn thành trên trường mẫu / thẻ đầu vào?


2791

Làm thế nào để bạn vô hiệu hóa autocompletetrong các trình duyệt chính cho một input(hoặc form field) cụ thể ?


2
Trong một số hệ thống mà người kiểm tra phải nhập nhiều thông tin theo cách thủ công, có thể hữu ích khi có tùy chọn có thể định cấu hình để khi kiểm tra bạn có thể vô hiệu hóa nó và chỉ cần nhấn 'tab> mũi tên xuống> tab> mũi tên xuống, v.v. . '
Simon_Weaver

Câu trả lời:


2625

Firefox 30 bỏ qua autocomplete="off"mật khẩu, chọn cách nhắc người dùng thay vào đó liệu mật khẩu có nên được lưu trên máy khách hay không. Lưu ý các bình luận sau đây từ ngày 5 tháng 5 năm 2014:

  • Trình quản lý mật khẩu luôn nhắc nếu muốn lưu mật khẩu. Mật khẩu không được lưu mà không có sự cho phép của người dùng.
  • Chúng tôi là trình duyệt thứ ba thực hiện thay đổi này, sau IE và Chrome.

Theo tài liệu của Mozilla Developer Network , thuộc tính phần tử biểu mẫu Boolean autocompletengăn dữ liệu biểu mẫu được lưu trong bộ nhớ cache trong các trình duyệt cũ hơn.

<input type="text" name="foo" autocomplete="off" />

45
Điều này không hoạt động với tôi trong Firefox 3.0.3. Tôi đã phải đặt thuộc tính tự động hoàn thành trong FORM thay vì INPUT.
Winston Fassett

17
Autocomplete chỉ được định nghĩa trong tiêu chuẩn HTML 5, vì vậy nó sẽ phá vỡ quy trình kiểm soát bạn chạy chống HTML 4 * ....
Jrgns

96
@Winston, bạn nên đặt cả hai trên biểu mẫu VÀ trên chính phần tử đầu vào. Bằng cách đó, bạn bao gồm tất cả các tiêu chuẩn không chuẩn của trình duyệt.
AviD

83
Và nhớ tắt tự động hoàn thành = trên tiện ích mở rộng (nếu bạn đang sử dụng Chrome) trước khi kiểm tra ứng dụng web của mình. Khác, bạn sẽ cảm thấy thực sự ngớ ngẩn như tôi. ;)
Jo Liss


314

Ngoài ra autocomplete=off, bạn cũng có thể đặt tên trường của biểu mẫu của mình một cách ngẫu nhiên theo mã tạo trang, có thể bằng cách thêm một số chuỗi cụ thể theo phiên vào cuối tên.

Khi biểu mẫu được gửi, bạn có thể loại bỏ phần đó trước khi xử lý chúng ở phía máy chủ. Điều này sẽ ngăn trình duyệt web tìm ngữ cảnh cho trường của bạn và cũng có thể giúp ngăn chặn các cuộc tấn công XSRF vì kẻ tấn công sẽ không thể đoán tên trường để gửi biểu mẫu.


10
Đây là một giải pháp tốt hơn nhiều so với việc sử dụng autocomplete = "off". Tất cả những gì bạn phải làm là tạo một tên mới trên mỗi lần tải trang và lưu tên đó vào $ _SESSION để sử dụng trong tương lai:$_SESSION['codefield_name'] = md5(uniqid('auth', true));
enchance

78
Không, đây không phải là giải pháp tốt hơn, vì nguồn gốc ưu tiên cho cài đặt này là tác nhân người dùng còn được gọi là trình duyệt web. Có một sự khác biệt giữa việc hỗ trợ một số hành vi nhất định (mà HTML 5 cố gắng thực hiện) và buộc nó bằng cách quyết định thay mặt người dùng, mà bạn đề xuất là "giải pháp tốt hơn nhiều".
Amn

15
Giải pháp này có thể hoạt động với tất cả các trình duyệt, vì vậy về mặt này thì "tốt hơn". Tuy nhiên, amn là chính xác, quyết định vô hiệu hóa tự động hoàn thành thay mặt cho người dùng của bạn không phải là một ý tưởng tốt. Điều này có nghĩa là tôi sẽ chỉ vô hiệu hóa tự động hoàn thành trong các tình huống rất cụ thể, chẳng hạn như khi bạn có kế hoạch xây dựng chức năng tự động hoàn thành của riêng mình và không muốn xung đột hoặc hành vi lạ.
macguru2000

8
Về các cuộc tấn công XSRF, tôi không chắc bạn đang hình dung kiểu tấn công nào, nhưng kẻ tấn công không thể loại bỏ phần cuối giống như cách bạn thực hiện phía máy chủ để xác định các trường? Hoặc nếu kẻ tấn công đang đăng các trường, họ không thể nối thêm chuỗi ngẫu nhiên của riêng mình vì nó sẽ bị máy chủ loại bỏ?
xr280xr

9
@ macguru2000 xây dựng tự động hoàn thành của riêng bạn là trường hợp sử dụng hoàn toàn hợp pháp và phổ biến. Thực sự trình duyệt sẽ giúp các nhà phát triển tắt tự động hoàn thành dễ dàng hơn khi họ cần thay vì buộc chúng tôi sử dụng các bản hack như thế này
tải vào

235

Hầu hết các trình duyệt và trình quản lý mật khẩu chính (IMHO) hiện đều bỏ qua autocomplete=off.

Tại sao? Nhiều ngân hàng và các trang web "bảo mật cao" khác được thêm vào autocomplete=offtrang đăng nhập của họ "vì mục đích bảo mật" nhưng điều này thực sự làm giảm tính bảo mật vì nó khiến mọi người thay đổi mật khẩu trên các trang web bảo mật cao này để dễ nhớ (và do đó bị bẻ khóa) kể từ khi tự động hoàn tất đã bị hỏng

Từ lâu, hầu hết các trình quản lý mật khẩu đã bắt đầu bỏ qua autocomplete=offvà bây giờ các trình duyệt bắt đầu làm tương tự chỉ với các đầu vào tên người dùng / mật khẩu.

Thật không may, các lỗi trong quá trình triển khai tự động hoàn thành chèn tên người dùng và / hoặc thông tin mật khẩu vào các trường biểu mẫu không phù hợp, gây ra lỗi xác thực biểu mẫu hoặc tệ hơn là vô tình chèn tên người dùng vào các trường mà người dùng cố tình để trống.

Nhà phát triển web phải làm gì?

  • Nếu bạn có thể tự giữ tất cả các trường mật khẩu trên một trang, đó là một khởi đầu tuyệt vời vì dường như sự hiện diện của trường mật khẩu là kích hoạt chính để người dùng / vượt qua tự động hoàn thành để khởi động. Nếu không, hãy đọc các mẹo bên dưới.
  • Safari thông báo rằng có 2 trường mật khẩu và vô hiệu hóa tự động hoàn tất trong trường hợp này, giả sử nó phải là một hình thức mật khẩu thay đổi, không phải là một hình thức đăng nhập. Vì vậy, chỉ cần đảm bảo sử dụng 2 trường mật khẩu (mới và xác nhận mới) cho bất kỳ biểu mẫu nào bạn cho phép
  • Thật không may, Chrome 34 sẽ cố gắng tự động điền các trường với người dùng / vượt qua bất cứ khi nào nó nhìn thấy một trường mật khẩu. Đây là một lỗi khá tệ mà hy vọng, họ sẽ thay đổi hành vi của Safari. Tuy nhiên, việc thêm phần này vào đầu biểu mẫu của bạn dường như vô hiệu hóa tự động điền mật khẩu:

    <input type="text" style="display:none">
    <input type="password" style="display:none">
    

Tôi chưa điều tra kỹ về IE hoặc Firefox nhưng sẽ vui lòng cập nhật câu trả lời nếu những người khác có thông tin trong các bình luận.


5
ý bạn là gì khi "thêm cái này vào trang của bạn dường như vô hiệu hóa tự động điền cho trang:"
wutzebaer

5
@wutzebaer, Chrome thông báo trường mật khẩu ẩn và tạm dừng tự động hoàn tất. Được biết, điều này là để ngăn chặn các trang web đánh cắp thông tin mật khẩu mà người dùng không nhận thấy.
David W

6
Đoạn mã của bạn ngăn tự động hoàn thành cho các trường đăng nhập trên Chrome, Firefox, IE 8 và IE 10. Không kiểm tra IE 11. Thứ tốt! Chỉ có câu trả lời đơn giản mà vẫn hoạt động.
Sam Watkins

3
Ghi chú safari của bạn dường như cũng hoạt động trên Chrome, ít nhất là vào tháng 12 năm 2015. Tôi đã có trường tên người dùng và mật khẩu trên biểu mẫu đăng ký tự động hoàn tất dữ liệu từ biểu mẫu đăng nhập. Việc tạo hai type='password'trường trên một trang khiến cho trình tự động "lưu mật khẩu" của trình duyệt bị bỏ qua, điều này khiến cho toàn bộ ý nghĩa vì các biểu mẫu đăng ký có xu hướng yêu cầu mật khẩu hai lần khi các biểu mẫu đăng nhập chỉ yêu cầu một lần.
Matt Fletcher

3
Dường như không hoạt động trong Chrome 55 nữa, trừ khi trường mật khẩu bổ sung không bị ẩn, điều này đánh bại mục đích.
jokkedk

160

Đôi khi, ngay cả autocomplete = off cũng không thể điền thông tin đăng nhập vào các trường sai, nhưng không phải trường người dùng hoặc biệt hiệu.

Cách giải quyết này ngoài bài đăng của apinstein về hành vi của trình duyệt.

sửa lỗi tự động điền trình duyệt ở chế độ chỉ đọc và đặt có thể ghi vào tiêu điểm (nhấp và tab)

 <input type="password" readonly  
     onfocus="this.removeAttribute('readonly');"/>

Cập nhật: Mobile Safari đặt con trỏ trong trường, nhưng không hiển thị bàn phím ảo. Fix mới hoạt động như trước nhưng xử lý bàn phím ảo:

<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
    this.removeAttribute('readonly');
    // fix for mobile safari to show virtual keyboard
    this.blur();    this.focus();  }" />

Bản demo trực tiếp https://jsfiddle.net/danielsuess/n0scguv6/

// Cập nhật

Bởi vì Trình duyệt tự động điền thông tin đăng nhập vào trường văn bản sai!?

Tôi nhận thấy hành vi kỳ lạ này trên Chrome và Safari, khi có các trường mật khẩu ở dạng tương tự. Tôi đoán, trình duyệt tìm trường mật khẩu để chèn thông tin đăng nhập đã lưu của bạn. Sau đó, nó tự động điền (chỉ đoán do quan sát) trường nhập văn bản gần nhất, xuất hiện trước trường mật khẩu trong DOM. Vì trình duyệt là phiên bản cuối cùng và bạn không thể kiểm soát nó,

Sửa chữa chỉ đọc ở trên làm việc cho tôi.


8
Nếu không có javascript thì toàn bộ hình thức thất bại. -1
Jimmy Kane

8
@JimmyKane, chìa khóa sẽ là thêm thuộc tính bằng cách sử dụng javascript ở vị trí đầu tiên (điều này không được thực hiện ở đây, nhưng chỉ thêm vào vì lợi ích hoàn chỉnh).
trnelson

@tmelson Tôi hiểu nhưng vẫn tại sao sử dụng js để thậm chí vô hiệu hóa? Hãy tránh js cho những thứ có thể được cải thiện nguyên bản. Một lần nữa tôi đồng ý với bạn mặc dù.
Jimmy Kane

3
Điều này không hoạt động ngay trong IE8, trường mật khẩu chỉ đọc không thể chỉnh sửa trong lần đầu tiên bạn tập trung vào nó, chỉ sau khi bạn không tập trung và tập trung lại. Ý tưởng hay, nhưng thật không may, nó hơi quá hack và không an toàn để sử dụng.
Sam Watkins

Điều này không hoạt động chính xác trên tất cả các trình duyệt (ví dụ IE 11 & IE Edge). Ngay sau khi readonlyđược loại bỏ, lựa chọn tiếp theo của trường sẽ dẫn đến việc tự động hoàn thành trở lại.
Mã hóa

106
<form name="form1" id="form1" method="post" 
      autocomplete="off" action="http://www.example.com/form.cgi">

Điều này sẽ hoạt động trong Internet Explorer và Mozilla FireFox, nhược điểm là nó không phải là chuẩn XHTML.


Tôi đã nhận thấy rằng việc thêm nó vào phần tử biểu mẫu không phải lúc nào cũng ngăn nó được áp dụng cho các đầu vào riêng lẻ trong biểu mẫu. Do đó, có lẽ tốt nhất là đặt nó trực tiếp vào phần tử đầu vào.
sholsinger

15
Trên thực tế @sholsinger, tốt nhất là đặt cả hai vào biểu mẫu VÀ trên chính phần tử đầu vào. Bằng cách đó, bạn bao gồm tất cả các tiêu chuẩn không chuẩn của trình duyệt.
AviD

2
Đáng buồn thay, kể từ IE 11, Microsoft không còn tôn trọng điều này input type="password"nữa. Hy vọng không có trình duyệt nào khác chọn loại bỏ chức năng này.
SamHuckaby

Cài đặt autocomplete="off"trên formlà điều duy nhất hoạt động cho Chrome.
Andrew

106

Giải pháp cho Chrome là thêm autocomplete="new-password"mật khẩu loại đầu vào. Vui lòng kiểm tra ví dụ dưới đây.

Thí dụ:

<form name="myForm"" method="post">
   <input name="user" type="text" />
   <input name="pass" type="password" autocomplete="new-password" />
   <input type="submit">
</form>

Chrome luôn tự động điền dữ liệu nếu tìm thấy hộp mật khẩu loại , chỉ đủ để chỉ ra hộp đó autocomplete = "new-password".

Công việc này tốt cho tôi.

Lưu ý: đảm bảo F12rằng các thay đổi của bạn có hiệu lực, nhiều lần trình duyệt lưu trang trong bộ nhớ cache, điều này mang lại cho tôi một ấn tượng xấu rằng nó không hoạt động, nhưng trình duyệt không thực sự mang lại thay đổi.


2
Điều này cũng hoạt động trong Chrome cho các loại trường khác, không chỉ gõ = "mật khẩu".
Jake

Tôi đã sử dụng nó với mật khẩu, email và các loại văn bản và nó đã hoạt động. Tôi đã sử dụng nó đơn giản như thế này: autocomplete = "new"
Crak_mboutin

autocomplete = "nope" name = "pswd" và được sử dụng <input name = "dummyPassword" type = "password" style = "display: none;"> trước trường nhập mật khẩu thực. Điều này làm việc cho tôi.
Denuka


Điều này hoạt động trong hầu hết tất cả các trình duyệt hiện nay, không chỉ Chrome: tự động hoàn thành # Browser_compabilities .
Andrew Morton

60

Như những người khác đã nói, câu trả lời là autocomplete="off"

Tuy nhiên, tôi nghĩ rằng đáng để nói rõ tại sao nên sử dụng điều này trong một số trường hợp nhất định vì một số câu trả lời cho câu hỏi này và các câu hỏi trùng lặp đã đề nghị tốt hơn là không nên tắt nó đi.

Dừng trình duyệt lưu trữ số thẻ tín dụng không nên để lại cho người dùng. Quá nhiều người dùng thậm chí sẽ không nhận ra đó là một vấn đề.

Điều đặc biệt quan trọng là tắt nó trên các trường cho mã bảo mật thẻ tín dụng. Như trang này nêu:

"Không bao giờ lưu trữ mã bảo mật ... giá trị của nó phụ thuộc vào giả định rằng cách duy nhất để cung cấp nó là đọc nó từ thẻ tín dụng vật lý, chứng minh rằng người cung cấp nó thực sự giữ thẻ."

Vấn đề là, nếu đó là một máy tính công cộng (quán cà phê ảo, thư viện, v.v.) thì người dùng khác có thể dễ dàng lấy cắp thông tin thẻ của bạn và ngay cả trên máy của bạn, một trang web độc hại có thể đánh cắp dữ liệu tự động hoàn tất .


7
Nếu tôi đã đi đến một trang web và nó nhớ thẻ của tôi trong danh sách thả xuống, tôi sẽ rất không vui. id bắt đầu tự hỏi làm thế nào họ có thể bất cẩn như vậy.
Simon_Weaver

8
Đơn giản hơn nhiều / trường hợp quan trọng hơn. Khi tôi truy cập trang của người dùng trên phần quản trị viên trên trang web của mình, nó cố gắng đặt tên người dùng và mật khẩu của họ thành tên người dùng và mật khẩu quản trị viên của tôi, không thể nói rằng đây không phải là một hình thức đăng nhập. Tôi muốn ghi nhớ mật khẩu quản trị viên của mình, nhưng đó là một lỗi nghiêm trọng khi nó cố gắng áp dụng tên người dùng / mật khẩu đã nhớ đó cho bất kỳ người dùng nào sau đó tôi chỉnh sửa.
rjmunro

34

Tôi đã giải quyết cuộc chiến bất tận với Google Chrome bằng việc sử dụng các ký tự ngẫu nhiên. Khi bạn luôn kết xuất tự động hoàn thành với chuỗi ngẫu nhiên, nó sẽ không bao giờ nhớ bất cứ điều gì.

<input name="name" type="text" autocomplete="rutjfkde">

Hy vọng rằng nó sẽ giúp cho những người khác.


2
Điều này thậm chí còn hoạt động tốt hơn. Bạn có thể thêm một mã nhỏ tạo mã ngẫu nhiên cho mỗi lần tải trang và thêm mã đó vào trường nhập: <code> function autoId () {var autoId = ""; var dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i <12; i ++) {autoId + = dict.charAt (Math.floor (Math.random () * dict.length)); } trả về autoId; } $ ('. autocompleteoff'). attr ('autocomplete', autoId ()); </ code> Bạn có thể thêm autocompleteofflớp vào trường nhập mong muốn của mình.
Raghuram Kasyap

không hoạt động trong phiên bản chrome 68.0.3440.106 (Bản dựng chính thức) (64-bit) của tôi
Sukanya Purushothaman

Chrome đã được sửa để sử dụng "tắt" được tiêu chuẩn hóa ngay bây giờ
MacK

1
Đáng buồn thay, nó hoạt động tốt hơn so với tiêu chuẩn được gọi là chrome
Nour Lababidi

1
Hôm nay tôi thấy rằng Chrome sẽ ghi đè chuỗi ngẫu nhiên bằng "Tắt". Tôi không thể tin rằng các nhà phát triển Chrome thực hiện thuộc tính này xấu và không kiểm soát. Tại sao ohh của tôi có.
bước

33

Tôi phải cầu xin khác với những câu trả lời để tránh vô hiệu hóa tự động hoàn thành.

Điều đầu tiên đưa ra là tự động hoàn thành không bị vô hiệu hóa rõ ràng trên các trường mẫu đăng nhập là một lỗi PCI-DSS. Ngoài ra, nếu máy cục bộ của người dùng bị xâm phạm thì mọi dữ liệu tự động hoàn thành có thể bị kẻ tấn công lấy một cách tầm thường do nó được lưu trữ rõ ràng.

Chắc chắn có một đối số cho khả năng sử dụng, tuy nhiên có một sự cân bằng rất tốt khi nói đến trường nào nên tự động hoàn thành bị vô hiệu hóa và trường nào không nên.


Tôi nhận thấy rằng IE không kích hoạt các sự kiện trên Thay đổi khi bạn điền một kiểu nhập văn bản bằng AutoComplete. Chúng tôi đã có hàng tá biểu mẫu và hơn một nghìn sự kiện onChange (xác thực đầu vào, logic kinh doanh) nằm rải rác trên chúng. Gần đây, chúng tôi đã nâng cấp IE lên phiên bản mới hơn và tất cả những điều kỳ lạ bất ngờ bắt đầu xảy ra. May mắn thay, chúng tôi đang chạy một ứng dụng mạng nội bộ và tự động hoàn tất không phải là vấn đề UX đối với chúng tôi, việc tắt nó đi sẽ dễ dàng hơn.
Robotron

3
Nếu một máy cục bộ của người dùng bị xâm nhập, chúng sẽ bị hỏng, theo chu kỳ. Nó có thể cài đặt keylogger, có thể có chứng chỉ gốc SSL giả được thêm vào và mọi thứ được gửi qua proxy giả, v.v. Tôi có lý do thực sự để tự động hoàn tất - Khi tôi đăng nhập với tư cách quản trị viên và truy cập trang chỉnh sửa người dùng, nó sẽ gán người dùng đó tên người dùng và mật khẩu quản trị viên của tôi. Tôi cần ngăn chặn hành vi này.
rjmunro

1
Các nhà cung cấp trình duyệt dường như đang tìm kiếm lợi ích riêng của họ. Mật khẩu đã lưu = khóa người dùng. Và tự động bật / tắt quá đơn giản - tại sao không phải là một tiêu chuẩn phức tạp về các gợi ý ngữ nghĩa ( html.spec.whatwg.org/multipage/, ), theo cách này, cho phép trình duyệt thu thập dữ liệu ngữ nghĩa có giá trị từ mỗi trang web thăm người dùng?
aro_tech

trường hợp sử dụng cụ thể mà tôi đang cố gắng giải quyết là đây: họ đã đăng nhập. Nhưng giờ họ sắp truy cập vào một thứ thậm chí còn nhạy cảm hơn. Tôi muốn hiển thị một hộp thoại làm cho họ xác thực lại, chống lại khả năng họ bỏ đi để có khói và một người xấu ngồi xuống ghế của họ. đã thử một số kỹ thuật để đánh bại tự động hoàn thành, và không có gì hoạt động. bây giờ tôi đang nghĩ, có lẽ, ít nhất, sử dụng 'password = window.prompt cũ ("Vui lòng nhập lại mật khẩu của bạn")' cộng với tên người dùng trong phiên và cố gắng xác thực điều đó.
David

31

Ba lựa chọn: Thứ nhất:

<input type='text' autocomplete='off' />

Thứ hai:

<form action='' autocomplete='off'>

Thứ ba (mã javascript):

$('input').attr('autocomplete', 'off');

2
Tùy chọn thứ nhất và thứ hai nên là một tùy chọn, vì nó khác nhau về cách trình duyệt xử lý việc này.
rybo111

Đã thử $ formEuity.attr ('tự động hoàn thành', 'tắt'); và nó không hoạt động.
Ben Sinclair

22

Trên một liên quan hoặc thực sự, trên lưu ý hoàn toàn ngược lại -

"Nếu bạn là người dùng của biểu mẫu đã nói ở trên và muốn kích hoạt lại chức năng tự động hoàn tất, hãy sử dụng bookmarklet 'nhớ mật khẩu' từ trang bookmarklets này . Nó sẽ xóa tất cả các autocomplete="off"thuộc tính khỏi tất cả các biểu mẫu trên trang. Hãy tiếp tục chiến đấu tốt! "


20

Chúng tôi thực sự đã sử dụng ý tưởng của sasb cho một trang web. Đó là một ứng dụng web phần mềm y tế để điều hành văn phòng bác sĩ. Tuy nhiên, nhiều khách hàng của chúng tôi là các bác sĩ phẫu thuật đã sử dụng rất nhiều máy trạm khác nhau, bao gồm cả các thiết bị đầu cuối bán công khai. Vì vậy, họ muốn đảm bảo rằng một bác sĩ không hiểu hàm ý của mật khẩu được lưu tự động hoặc không chú ý có thể vô tình để thông tin đăng nhập của họ dễ dàng truy cập. Tất nhiên, điều này đã có trước ý tưởng duyệt web riêng tư bắt đầu được đề cao trong IE8, FF3.1, v.v. Thậm chí, nhiều bác sĩ buộc phải sử dụng trình duyệt trường học cũ trong bệnh viện với CNTT sẽ không thay đổi.

Vì vậy, chúng tôi đã có trang đăng nhập tạo tên trường ngẫu nhiên chỉ hoạt động cho bài đăng đó. Vâng, nó không thuận tiện, nhưng nó chỉ đánh vào đầu người dùng về việc không lưu trữ thông tin đăng nhập trên các thiết bị đầu cuối công cộng.


20

Không có giải pháp nào làm việc cho tôi trong cuộc trò chuyện này.

Cuối cùng tôi đã tìm ra một giải pháp HTML thuần túy không yêu cầu Javascript , hoạt động trong các trình duyệt hiện đại (ngoại trừ IE; phải có ít nhất 1 lần bắt, phải không?) Và không yêu cầu bạn tắt tự động hoàn thành cho toàn bộ biểu mẫu.

Chỉ cần tắt tự động hoàn tất trên formvà sau đó BẬT nó cho bất kỳ inputbạn muốn nó hoạt động trong biểu mẫu. Ví dụ:

<form autocomplete="off">
    <!-- these inputs will not allow autocomplete and chrome 
         won't highlight them yellow! -->
    <input name="username"  />
    <input name="password" type="password" />
    <!-- this field will allow autocomplete to work even 
         though we've disabled it on the form -->
    <input name="another_field" autocomplete="on" />
</form>

Đây hoàn toàn là những gì tôi đang tìm kiếm!
Marco

20

Chỉ cần đặt autocomplete="off". Có một lý do rất tốt để làm điều này: Bạn muốn cung cấp chức năng tự động hoàn thành của riêng bạn!


20

Tôi đã thử các giải pháp vô tận, và sau đó tôi thấy điều này:

Thay vì autocomplete="off"chỉ đơn giản là sử dụngautocomplete="false"

Đơn giản như vậy và nó cũng hoạt động như một cơ duyên trong Google Chrome!


Như bạn đã nói trong chrome, giá trị tắt không hoạt động. Nó cần phải là "sai"
azuax

Hoạt động với tôi trên Chrome 44.0.2403.130.
GuiGS

1
Đã thử điều này: $ formEuity.attr ('tự động hoàn thành', 'false'); xin lỗi không hoạt động
Ben Sinclair

20

Điều này làm việc cho tôi.

<input name="pass" type="password" autocomplete="new-password" />

Chúng tôi cũng có thể sử dụng chiến lược này trong các điều khiển khác như văn bản, chọn vv


đây sẽ là câu trả lời mới nhất câu trả lời duy nhất phù hợp với tôi trong chrome mới nhất
Nick Chan Abdullah

19

Tôi nghĩ rằng autocomplete=offđược hỗ trợ trong HTML 5.

Tự hỏi bản thân tại sao bạn muốn làm điều này mặc dù - nó có thể có ý nghĩa trong một số tình huống nhưng đừng làm điều đó chỉ vì lợi ích của việc đó.

Nó không thuận tiện cho người dùng và thậm chí không phải là vấn đề bảo mật trong OS X (được đề cập bởi Soren bên dưới). Nếu bạn lo lắng về việc mọi người bị đánh cắp mật khẩu từ xa - một trình ghi nhật ký gõ phím vẫn có thể làm điều đó mặc dù ứng dụng của bạn sử dụng autcomplete=off.

Là người dùng chọn để có một trình duyệt ghi nhớ (hầu hết) thông tin của tôi, tôi sẽ thấy khó chịu nếu trang web của bạn không nhớ thông tin của tôi.


17

Ngoài

autocomplete="off"

Sử dụng

readonly onfocus="this.removeAttribute('readonly');"

cho các đầu vào mà bạn không muốn họ nhớ dữ liệu mẫu ( username, password, vv) như hình dưới đây:

<input type="text" name="UserName" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

<input type="password" name="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

Hi vọng điêu nay co ich.


1
Đối với tôi trong IE11, tôi không thể gõ vào hộp văn bản ngay cả sau khi tiêu điểm xóa bỏ thuộc tính chỉ đọc. Tuy nhiên, nếu tôi bấm lần thứ hai vào hộp văn bản thì tôi có thể gõ.
mcallahan

Tôi gặp vấn đề tương tự với IE11 (không thể gõ cho đến tiêu điểm thứ hai). Thêm một mờ và sau đó tập trung một lần nữa hoạt động. $(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
palmsey

@Andrew Chắc chắn, bạn có thể. Đây là nguyên tắc cốt lõi để khắc phục vấn đề này và tôi cũng đã thêm một bản cập nhật chứa ví dụ mã đầy đủ;)
Murat Yıldız

Tôi cũng đã thêmonfocusout="this.setAttribute('readonly', 'readonly');"
rinatdobr

16

Giải pháp tốt nhất:

Ngăn chặn tên người dùng tự động hoàn thành (hoặc email) và mật khẩu:

<input type="email" name="email"><!-- Can be type="text" -->
<input type="password" name="password" autocomplete="new-password">

Ngăn tự động hoàn thành một trường:

<input type="text" name="field" autocomplete="nope">

Giải thích: autocompletetiếp tục làm việc <input>, autocomplete="off"không hoạt động, nhưng bạn có thể thay đổi offthành một chuỗi ngẫu nhiên, như nope.

Hoạt động trong:

  • Chrome: 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 và 64

  • Firefox: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 và 58


2
Tôi tìm thấy điều này để làm việc trong thử nghiệm sơ bộ của tôi. Thật kỳ lạ khi "tắt" không hoạt động.
Craig Jacobs

Điều này không hoạt động cho Chrome trên Android. Tôi đã thử đặt giá trị chuỗi cho autocompletethuộc tính và nó vẫn hiển thị các mục trước dưới dạng đề xuất tự động hoàn thành trong đầu vào.
tebs1200

@ tebs1200 cái nào? Trường mật khẩu hay trường văn bản?
Cava

@Cava xin lỗi vì phản hồi chậm. Trường văn bản. Không quan trọng tôi đặt giá trị autocompletenào, tôi vẫn nhận được danh sách thả xuống gợi ý dựa trên các giá trị đã nhập trước đó. Nó tốt trên máy tính để bàn, nhưng không phải trên Android chrome.
tebs1200

14

Một chút muộn của trò chơi ... nhưng tôi chỉ gặp phải vấn đề này và đã thử một vài lần thất bại, nhưng điều này làm việc với tôi được tìm thấy trên MDN

Trong một số trường hợp, trình duyệt sẽ tiếp tục đề xuất các giá trị tự động hoàn thành ngay cả khi thuộc tính tự động hoàn thành được đặt thành tắt. Hành vi bất ngờ này có thể khá khó hiểu cho các nhà phát triển. Mẹo để thực sự buộc không hoàn thành là gán một chuỗi ngẫu nhiên cho thuộc tính như vậy:

autocomplete="nope"

13

Thêm

autocomplete="off"

vào thẻ biểu mẫu sẽ vô hiệu hóa trình duyệt tự động hoàn thành (những gì trước đây được nhập vào trường đó) từ tất cả các inputtrường trong biểu mẫu cụ thể đó.

Đã thử nghiệm trên:

  • Firefox 3.5, 4 BETA
  • Internet Explorer 8
  • Trình duyệt Chrome

13

Thêm autocomplete="off"sẽ không cắt nó.

Thay đổi thuộc tính loại đầu vào thành type="search".
Google không áp dụng tự động điền vào các đầu vào với một loại tìm kiếm.


4
Đây là một hack. Trường không phải là trường tìm kiếm. Trong tương lai điều này có thể gây ra rắc rối.
Roel

12

Sử dụng tên và id không chuẩn cho các trường, thay vì "name" có "name_". Các trình duyệt sau đó sẽ không xem nó là trường tên. Phần tốt nhất về nó là bạn có thể làm điều này với một số nhưng không phải tất cả các trường và nó sẽ tự động hoàn thành một số nhưng không phải tất cả các trường.


Vấn đề với điều này là nếu bất kỳ trang web nào khác sử dụng "name_" để đạt được cùng một mục tiêu thì bạn sẽ quay lại quảng trường.
ConroyP

3
vì vậy hãy làm cho nó "mysite_name". Nếu có ai khác đang sử dụng điều đó, tôi sẽ hỏi họ câu hỏi ...
Steve Perks

điều này làm rối tung một số tiện ích dân cư tự động
Simon_Weaver

12

Để tránh XHTML không hợp lệ, bạn có thể đặt thuộc tính này bằng cách sử dụng javascript. Ví dụ sử dụng jQuery:

<input type="text" class="noAutoComplete" ... />

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

Vấn đề là người dùng không có javascript sẽ có được chức năng tự động hoàn thành.


38
Điều này không tránh xhtml không hợp lệ, nó chỉ đơn giản là thêm bit không hợp lệ một cách linh hoạt sau khi bạn đã kiểm tra nó tuyên bố nó là hợp lệ!
Andiih

@Andiih: Vậy có cách nào để tự động hoàn thành công việc trong xhtml không?
cherouvim

1
Làm việc (hoặc dừng nó làm việc là mục tiêu): có như trên. Nhưng hợp lệ - không.
Andiih

11

hãy thử những điều này nếu autocomplete="off"nó không hoạt động:

autocorrect="off" autocapitalize="off" autocomplete="off"

11

Tôi không thể tin rằng đây vẫn là một vấn đề rất lâu sau khi nó được báo cáo. Các giải pháp trên không hiệu quả với tôi, vì safari dường như biết khi nào phần tử không được hiển thị hoặc ngoài màn hình, tuy nhiên những điều sau đây đã làm việc với tôi:

<div style="height:0px; overflow:hidden; ">
  Username <input type="text" name="fake_safari_username" >
  Password <input type="password" name="fake_safari_password">
</div>

Hy vọng điều đó hữu ích cho ai đó!


1
Vì vậy, đặt điều này trước khi các trường tên người dùng và mật khẩu thực tế làm việc? trình duyệt chứa đầy những thứ đó chứ không phải cái thật
Andrew

11

Vì vậy, đây là:

function turnOnPasswordStyle() {
  $('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">


1
Có vẻ như ý tưởng tốt nếu hộp văn bản kiểu để ngăn flash của mật khẩu hiển thị.
Andrew

1
Cảm ơn rất nhiều, điều này đã thực hiện công việc +1, biến thể của tôi đối với giải pháp của bạn là thực hiện theo một dòng duy nhất: <input oninput = "this.type = 'password'" id = "inputpassword" type = "text">
Hasnaa Ibraheem

@HasnaaIbraheem Cảm ơn (: đôi khi dễ đọc hơn là tốt hơn
Stav Bodik

11

Đây là một vấn đề bảo mật mà các trình duyệt bỏ qua bây giờ. Trình duyệt xác định và lưu trữ nội dung bằng tên đầu vào, ngay cả khi nhà phát triển coi thông tin là nhạy cảm và không nên được lưu trữ. Đặt tên đầu vào khác nhau giữa 2 yêu cầu sẽ giải quyết vấn đề (nhưng vẫn sẽ được lưu trong bộ đệm của trình duyệt và cũng sẽ tăng bộ đệm của trình duyệt). Yêu cầu người dùng kích hoạt hoặc hủy kích hoạt các tùy chọn trong cài đặt trình duyệt của nó không phải là một giải pháp tốt. Vấn đề có thể được khắc phục trong phần phụ trợ.

Đây là sửa chữa của tôi. Một cách tiếp cận mà tôi đã thực hiện trong khuôn khổ của tôi. Tất cả các yếu tố tự động hoàn thành được tạo ra với một đầu vào ẩn như thế này:

<? $r = rmd5(rand().mocrotime(TRUE)); ?>
<form method="POST" action="./">
    <input type="text" name="<? echo $r; ?>" />
    <input type="hidden" name="__autocomplete_fix_<? echo $r; ?>" value="username" />
    <input type="submit" name="submit" value="submit" />
</form>

Máy chủ sau đó xử lý các biến bài như thế này:

foreach ($_POST as $key => $val)
{
    if(preg_match('#^__autocomplete_fix_#', $key) === 1){
        $n = substr($key, 19);
        if(isset($_POST[$n]))$_POST[$val] = $_POST[$n];
    }
}

Giá trị có thể được truy cập như bình thường

var_dump($_POST['username']);

Và trình duyệt sẽ không thể đề xuất thông tin từ yêu cầu trước hoặc từ người dùng trước.

Tất cả hoạt động như một sự quyến rũ, ngay cả khi trình duyệt cập nhật, muốn bỏ qua tự động hoàn thành hay không. Đó là cách tốt nhất để khắc phục vấn đề cho tôi.


10

Không có bản hack nào được đề cập ở đây làm việc cho tôi trong Chrome. Có một cuộc thảo luận về vấn đề ở đây: https://code.google.com.vn/p/chromium/issues/detail?id=468153#c41

Thêm phần này vào trong <form>tác phẩm (ít nhất là bây giờ):

<div style="display: none;">
    <input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>

1
Lưu ý rằng bằng cách sử dụng kỹ thuật này, FireFox sẽ vẫn thực sự tự động điền vào trường ẩn đó, sẽ được đưa vào khi gửi biểu mẫu. Điều đó có thể sẽ tệ, vì mật khẩu sau đó sẽ được chuyển qua một kết nối không được bảo mật. May mắn thay, việc maxlength="0"ngăn chặn firefox tự động điền vào trường.
Mikal Schacht Jensen

9

Bạn có thể sử dụng trong đầu vào.

Ví dụ;

<input type=text name="test" autocomplete="off" />
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.