Vô hiệu hóa Tự động điền Chrome


620

Tôi đã gặp vấn đề với hành vi tự động điền chrome trên một số biểu mẫu.

Các trường trong biểu mẫu đều có tên rất phổ biến và chính xác, chẳng hạn như "email", "tên" hoặc "mật khẩu" và chúng cũng đã autocomplete="off"được đặt.

Cờ tự động hoàn thành đã vô hiệu hóa thành công hành vi tự động hoàn thành, trong đó thả xuống các giá trị xuất hiện khi bạn bắt đầu nhập, nhưng không thay đổi các giá trị mà Chrome tự động điền vào các trường như.

Hành vi này sẽ ổn, ngoại trừ việc chrome điền các đầu vào không chính xác, ví dụ điền vào đầu vào điện thoại bằng một địa chỉ email. Khách hàng đã phàn nàn về điều này, vì vậy nó đã được xác minh là xảy ra trong nhiều trường hợp và không phải là một kết quả nào đó đối với một cái gì đó mà tôi đã thực hiện cục bộ trên máy của mình.

Giải pháp hiện tại duy nhất tôi có thể nghĩ đến là tự động tạo các tên đầu vào tùy chỉnh và sau đó trích xuất các giá trị trên phụ trợ, nhưng đây có vẻ là một cách khá khó khăn xung quanh vấn đề này. Có bất kỳ thẻ hoặc quirks thay đổi hành vi tự động điền có thể được sử dụng để khắc phục điều này?


6
Nó không phải là một bản sao. Cái này xử lý vô hiệu hóa tính năng tự động điền, cái này xử lý kiểu dáng màu tự động điền ...
Nicu Surdu

17
autocomplete = "false" thay vì autocomplete = "off" theo câu trả lời của Kaszoni Ferencz, hãy bình chọn cho mọi người.
mã hóa thô

7
Nhìn vào số lượng câu trả lời cho câu hỏi này - nó sẽ cho bạn biết một điều: bạn đang chiến đấu với một trận thua. Đây không còn là vấn đề của Chrome nữa, Firefox và những người khác đã làm theo. Dù muốn hay không, bạn cần chấp nhận quyết định của ngành công nghiệp trình duyệt, hình thức tự động hoàn thành là lựa chọn của người dùng - bạn có thể chiến đấu với họ, nhưng bạn sẽ thua. Vào cuối ngày, câu hỏi bạn nên đặt ra là không, làm thế nào tôi có thể lật đổ tự động hoàn thành, nhưng thay vào đó, làm thế nào để tôi tạo các biểu mẫu hoạt động tốt với tự động hoàn thành. Mối quan tâm của bạn về bảo mật không phải là vấn đề của bạn, mà là người dùng.
mindplay.dk

21
Xin lỗi, nhưng phản hồi của @ mindplay.dk là phản tác dụng. Tình huống của tôi là tôi có người dùng đã đăng nhập vào trang web của tôi và một trang trên trang web là để họ nhập thông tin tài khoản / pwd cho các hệ thống khác. Khi tôi đưa ra một diaog để họ nhập một cái mới, thông tin đăng nhập của họ cho trang web của tôi được điền vào, điều này hoàn toàn sai và sẽ gây ra vấn đề nếu / khi người dùng vô tình nhập thông tin đó vào. Hai người không có gì để làm với lẫn nhau. Trong trường hợp này, trình duyệt đang làm một cái gì đó trái ngược với những gì người dùng muốn.
Mike K

8
@ tâm trí " Tuy nhiên, yêu cầu họ thiết lập Chrome, IE hoặc bất kỳ trình duyệt nào khác sẽ để lại những lỗ hổng trong quá trình xác thực, vì họ có thể, cố ý hoặc không, kết thúc bằng cách sử dụng tính năng tự động điền. ANot tất cả các ứng dụng web là cùng loại, với cùng loại người dùng hoặc mối quan tâm.
PoloHoleSet

Câu trả lời:


906

Đối với các phiên bản Chrome mới, bạn chỉ cần đặt autocomplete="new-password"vào trường mật khẩu của mình và đó là nó. Tôi đã kiểm tra nó, hoạt động tốt.

Có mẹo đó từ nhà phát triển Chrome trong cuộc thảo luận này: https://bugs.chromium.org/p/chromium/issues/detail?id=370363#c7

PS Lưu ý rằng Chrome sẽ cố gắng suy luận hành vi tự động điền từ tên, id và bất kỳ nội dung văn bản nào mà nó có thể có xung quanh trường bao gồm nhãn và các nút văn bản tùy ý. Nếu có mã thông báo tự động hoàn thành như street-addresstrong ngữ cảnh, Chrome sẽ tự động điền như vậy. Các heuristic có thể khá khó hiểu vì đôi khi nó chỉ kích hoạt nếu có các trường bổ sung trong biểu mẫu hoặc không nếu có quá ít trường trong biểu mẫu. Cũng lưu ý rằng autocomplete="no"sẽ xuất hiện để làm việc nhưng autocomplete="off"sẽ không vì lý do lịch sử. autocomplete="no"bạn đang nói với trình duyệt rằng trường này sẽ được tự động hoàn thành dưới dạng một trường được gọi "no". Nếu bạn tạo autocompletetên ngẫu nhiên duy nhất, bạn tắt tự động hoàn thành.

Nếu người dùng của bạn đã truy cập các hình thức xấu, thông tin tự động điền của họ có thể bị hỏng . Yêu cầu họ truy cập thủ công và sửa thông tin tự động điền của họ trong Chrome có thể là hành động cần thiết từ họ.


115
'Mật khẩu mới' hoạt động với tôi sau khi thử 'tắt' và 'sai'
Kevin

26
Đây là sửa chữa duy nhất làm việc bây giờ. Sai, và tắt, không hoạt động nữa. Nên là câu trả lời đúng bây giờ.
David

5
Lý do điều này hoạt động là vì nhóm chrome đang cố gắng tạo các giá trị tự động hoàn thành được đề xuất, như được hiển thị @ developers.google.com/web/fundamentals/design-and-ui/input/ . Giá trị "mật khẩu mới" là một trong những một số ít có logic bổ sung xung quanh nó, và trong trường hợp này, nó tạm dừng tự động điền nhưng vẫn cho phép các đề xuất tự động hoàn thành
Deminetix

30
Không hoạt động kể từ 1.13.2018 Phiên bản 63.0.3239.132 (Bản dựng chính thức) (64-bit)
PellucidWombat

37
Tôi chỉ muốn nói .. Sau khi vấp phải vấn đề này .. Chrome là một tác phẩm thực sự. Vì vậy, bây giờ chúng ta phải nhảy qua các vòng để vô hiệu hóa chức năng được cho là vẫn là tùy chọn. Trong thế giới nào sẽ giải quyết vấn đề tự động điền trong ứng dụng kinh doanh nơi địa chỉ mới / khác nhau mỗi lần. Google đang trở nên tồi tệ như Microsoft.
Eddy Howard

700

Tôi vừa thấy rằng nếu bạn có tên người dùng và mật khẩu đã nhớ cho một trang web, phiên bản Chrome hiện tại sẽ tự động điền tên người dùng / địa chỉ email của bạn vào trường trước bất kỳ type=passwordtrường nào . Nó không quan tâm trường được gọi là gì - chỉ giả sử trường trước khi mật khẩu sẽ là tên người dùng của bạn.

Giải pháp cũ

Chỉ cần sử dụng <form autocomplete="off">và nó sẽ ngăn chặn việc điền trước mật khẩu cũng như bất kỳ loại điền vào trường nào dựa trên các giả định mà trình duyệt có thể đưa ra (thường là sai). Trái ngược với việc sử dụng <input autocomplete="off">dường như bị bỏ qua khá nhiều bởi tính năng tự động điền mật khẩu (trong Chrome, đó là, Firefox tuân theo nó).

Giải pháp cập nhật

Chrome bỏ qua <form autocomplete="off"> . Do đó, cách giải quyết ban đầu của tôi (mà tôi đã xóa) bây giờ là tất cả cơn thịnh nộ.

Chỉ cần tạo một vài trường và làm cho chúng bị ẩn bằng "display: none". Thí dụ:

<!-- fake fields are a workaround for chrome autofill getting the wrong fields -->
<input style="display:none" type="text" name="fakeusernameremembered"/>
<input style="display:none" type="password" name="fakepasswordremembered"/>

Sau đó đặt các lĩnh vực thực sự của bạn bên dưới.

Hãy nhớ thêm nhận xét hoặc những người khác trong nhóm của bạn sẽ tự hỏi bạn đang làm gì!

Cập nhật tháng 3 năm 2016

Chỉ cần thử nghiệm với Chrome mới nhất - tất cả đều tốt. Đây là một câu trả lời khá cũ bây giờ nhưng tôi muốn chỉ đề cập rằng nhóm của chúng tôi đã sử dụng nó trong nhiều năm nay cho hàng chục dự án. Nó vẫn hoạt động tuyệt vời mặc dù một vài bình luận dưới đây. Không có vấn đề với khả năng truy cập vì các trường có display:nonenghĩa là chúng không tập trung. Như tôi đã đề cập, bạn cần đặt chúng trước các lĩnh vực thực sự của bạn.

Nếu bạn đang sử dụng javascript để sửa đổi biểu mẫu của mình, bạn sẽ cần thêm một mẹo nữa. Hiển thị các trường giả trong khi bạn đang thao tác biểu mẫu và sau đó ẩn chúng lại một phần nghìn giây sau.

Mã ví dụ sử dụng jQuery (giả sử bạn cung cấp cho các trường giả của bạn một lớp):

        $(".fake-autofill-fields").show();
        // some DOM manipulation/ajax here
        window.setTimeout(function () {
            $(".fake-autofill-fields").hide();
        },1);

Cập nhật tháng 7 năm 2018

Giải pháp của tôi không còn hoạt động tốt nữa vì các chuyên gia chống sử dụng của Chrome đã rất nỗ lực. Nhưng họ đã ném cho chúng tôi một cục xương dưới dạng:

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

Điều này hoạt động và chủ yếu giải quyết vấn đề.

Tuy nhiên, nó không hoạt động khi bạn không có trường mật khẩu mà chỉ có một địa chỉ email. Điều đó cũng có thể khó khăn để khiến nó ngừng chuyển sang màu vàng và làm sẵn. Giải pháp trường giả có thể được sử dụng để khắc phục điều này.

Trong thực tế, đôi khi bạn cần thả vào hai lĩnh vực giả và thử chúng ở những nơi khác nhau. Ví dụ: tôi đã có các trường giả ở đầu biểu mẫu của mình, nhưng Chrome gần đây đã bắt đầu điền lại trường 'Email' của mình - vì vậy, tôi đã nhân đôi và đưa vào các trường giả mạo hơn ngay trước trường 'Email' và điều đó đã sửa nó . Loại bỏ lô thứ nhất hoặc thứ hai của trường trở lại tự động điền quá nhiệt không chính xác.

Cập nhật tháng 3 năm 2020

Không rõ liệu và khi nào giải pháp này vẫn hoạt động. Nó dường như vẫn hoạt động đôi khi nhưng không phải tất cả thời gian.

Trong các ý kiến ​​dưới đây, bạn sẽ tìm thấy một vài gợi ý. Một cái vừa được thêm bởi @anilyeni có thể đáng để điều tra thêm:

Như tôi nhận thấy, autocomplete="off"hoạt động trên Chrome 80, NẾU có ít hơn 3 yếu tố <form>. Tôi không biết logic là gì hoặc tài liệu liên quan về nó ở đâu.

Ngoài ra cái này từ @dubrox có thể có liên quan, mặc dù tôi chưa thử nó:

cảm ơn rất nhiều về mánh khóe, nhưng xin vui lòng cập nhật câu trả lời, vì display:none;không còn hoạt động nữa, nhưng position: fixed;top:-100px;left:-100px; width:5px;:)

Cập nhật THÁNG 4 NĂM 2020

Giá trị đặc biệt cho chrome cho thuộc tính này đang thực hiện công việc: (được thử nghiệm trên đầu vào - nhưng không phải bởi tôi) autocomplete="chrome-off"


7
Tôi rất chắc chắn rằng điều này sẽ hoạt động khi bạn giải thích hoàn hảo tính năng tự động điền tự động mà tôi gặp phải với đầu vào trước trường mật khẩu. Thật không may, nó không hoạt động với tôi, tôi đặt autocomplete = "tắt" trên cả biểu mẫu và tất cả các đầu vào và chúng vẫn được điền. Giải pháp duy nhất hiệu quả với tôi là trong liên kết của goodeye ở trên. (đặt đầu vào loại ẩn thứ hai = "mật khẩu" trước khi mật khẩu loại bỏ kiểm tra heuristic của chrome)
quốc hội

19
Điều này đã từng hoạt động tốt, tôi cũng đã sử dụng nó, nhưng kể từ khi Chrome nâng cấp cách đây một thời gian (từ đó đến ngày 5 tháng 5), Chrome đã bỏ qua thuộc tính biểu mẫu :(
Tominator

13
Google đã đưa ra quyết định trong (Chrome v34 tôi nghĩ) để đưa ra chính sách LUÔN LUÔN bây giờ bỏ qua autocomplete = "tắt", bao gồm các chỉ thị cấp biểu mẫu ... sẽ ổn nếu thực sự có các trường chết tiệt.
Jammer

10
thử autocomplete = "false" không autocomplete = "off"
rawcoder

243
Thuộc tính này cũng được yêu cầu:autocomplete="I told you I wanted this off, Google. But you would not listen."
rybo111

265

Sau nhiều tháng và nhiều tháng đấu tranh, tôi đã thấy rằng giải pháp đơn giản hơn nhiều so với bạn có thể tưởng tượng:

Thay vì autocomplete="off"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!


Cập nhật tháng 8 năm 2019 (ghi có vào @JonEdiger trong các bình luận)

Lưu ý: rất nhiều thông tin trực tuyến cho biết các trình duyệt hiện xử lý autocomplete = 'false' giống như autocomplete = 'off'. Ít nhất là ngay lúc này, nó đang ngăn tự động hoàn thành cho ba trình duyệt đó.

Đặt nó ở cấp biểu mẫu và sau đó cho các đầu vào bạn muốn tắt, đặt thành một số giá trị không hợp lệ như 'none':

<form autocomplete="off"> 
  <input type="text" id="lastName" autocomplete="none"/> 
  <input type="text" id="firstName" autocomplete="none"/>
</form>

8
Đã làm cho tôi! Nhưng có một nhận xét quan trọng: Tôi có 5 trường trong trang web của mình: Tên, Địa chỉ, Mã Zip, Điện thoại và Email. Khi tôi bao gồm autocomplete = 'false' trên Biểu mẫu và trên trường Tên, nó vẫn hoạt động. Tuy nhiên, khi tôi đưa tính năng tự động hoàn thành = 'false' vào trường Địa chỉ, nó sẽ tự động dừng việc tự động điền chúng! Vì vậy, bạn cần đặt thuộc tính tự động hoàn thành không phải trên trường đăng nhập hoặc tên, mà trên các trường sau đây! (Hoạt động trên Chrome 43.0.2357.81 kể từ 2015-05-27)
Dvd Franco

45
NẾU ĐIỀU NÀY KHÔNG LÀM VIỆC CHO BẠN: Hãy nhớ rằng có 2 cách Chrome "giúp" người dùng. AUTOCOMPLETE sẽ nhắc dựa trên lần gửi trước đó trong cùng một biểu mẫu đã nộp và sẽ ảnh hưởng đến những người đang sử dụng biểu mẫu nhiều lần. Tự động hoàn tất bị vô hiệu hóa với tự động hoàn thành = "tắt". AUTOFILL sẽ nhắc dựa trên sổ địa chỉ từ các mẫu tương tự đã điền trước đó trên các trang khác. Nó cũng sẽ làm nổi bật các lĩnh vực nó đang thay đổi. Tự động điền có thể bị vô hiệu hóa với autocomplete = "false".
genkilabs

4
Điều này không phù hợp với tôi (Phiên bản 43.0.2357.124 m). Đây có lẽ là một sự giám sát của Google, hiện đã được giải quyết. Họ dường như đang nghĩ rằng "người dùng luôn luôn đúng" ở chỗ họ muốn tự động điền mọi thứ. Vấn đề là, biểu mẫu đăng ký của tôi lưu dữ liệu người dùng giống như biểu mẫu đăng nhập, điều này chắc chắn không phải là điều người dùng muốn ...
rybo111

3
YEP Nó hoạt động trong Chrome 43.0.2357 !! hành vi này trong Chrome rất khó chịu và cách giải quyết này khiến tôi mất một lúc để tìm ra. Cảm ơn câu trả lời của bạn.
Adriano Rosa

3
không hoạt động với Chrome 44.0.2403.157. Làm thế nào tính năng này có thể hoạt động và không hoạt động với các phiên bản khác nhau. Thật là nực cười
Mattijs

120

Đôi khi, thậm chí autocomplete=offsẽ không ngăn chặn việc điền thông tin vào các trường sai.

Cách giải quyết là tắt tính năng tự động điền trình duyệt bằng chế độ chỉ đọc và đặt tiêu điểm có thể ghi vào tiêu điểm:

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

Sự focuskiện này xảy ra khi nhấp chuột và lập bảng thông qua các trường.

Cập nhật:

Mobile Safari đặt con trỏ trong trường, nhưng không hiển thị bàn phím ảo. Cách giải quyết mới này hoạt động như trước đây, 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

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

điền thông tin nhập không chính xác, ví dụ điền thông tin vào điện thoại bằng địa chỉ email

Đôi khi 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 tên người dùng vào 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 (chỉ cần đoán do quan sát). 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.


12
thật là một sửa chữa tuyệt vời :) bạn nên thay thế jquery bằng cái này: this.removeAttribution ("class")
Roey

Tôi đã sử dụng điều này để ngăn chặn một danh sách dropdwonlist được tự động điền. Nhưng cũng được thiết kế lại chỉ để nó không nhìn. Ý tưởng tuyệt vời!
Thoải

1
@Clint: Đoạn mã của tôi ở trên sẽ loại bỏ thuộc tính chỉ đọc ngay khi người dùng vào trường (mỗi lần nhấp chuột hoặc phím tab). Tôi đoán, bạn đề cập đến một trường, tự động điền được bảo vệ , nhưng không bị người dùng chạm vào. Mục đích của lĩnh vực này là gì - và nó có thực sự cần được bảo vệ? Tùy thuộc vào kịch bản, loại bỏ tất cả các thuộc tính chỉ đọc khi gửi có thể là một tùy chọn. Bạn có thể thêm một nhận xét cụ thể hơn về vấn đề của bạn? Có lẽ tôi có thể giúp bạn ra :)
dsuess

1
Nếu bạn đang sử dụng JavaScript. Tại sao không chỉ đặt giá trị thành dummyvà sau đó loại bỏ giá trị một lần nữa? Thêm và xóa âm thanh chỉ đọc như một động thái nguy hiểm - điều gì xảy ra nếu trình duyệt không muốn bạn tập trung vào nó?
rybo111

1
Rõ ràng google đang cố gắng đưa ra quyết định cho tất cả chúng ta ở đây, họ đã đóng vé liên quan đến autocomplete = "off": bug.chromium.org/p/chromium/issues/detail?id=468153 . Nhưng có một vé khác được mở để thu thập các trường hợp người dùng hợp lệ để vô hiệu hóa tự động điền, vui lòng trả lời vé này để nâng cao nhận thức về vấn đề này tại đây: bug.chromium.org/p/chromium/issues/detail?id=587466
Norman Xu

80

Nếu bạn đang triển khai tính năng hộp tìm kiếm, hãy thử đặt typethuộc tính searchnhư sau:

<input type="search" autocomplete="off" />

Điều này hoạt động với tôi trên Chrome v48 và dường như là đánh dấu hợp pháp:

https://www.w3.org/wiki/HTML/Elements/input/search


Đúng! :) Cảm ơn bạn! Điều này hoạt động trong Chrome 67.0.3394.99. (Tôi nghĩ rằng liên kết của bạn nên là: w3.org/wiki/HTML/Elements/input/search kể từ tháng 9 năm 2018).
Andy King

4
Cuối cùng! vẫn hoạt động Phiên bản 69.0.3497.100 (Bản dựng chính thức) (64-bit) Đây sẽ là câu trả lời thực sự!
Venson

1
mọi người đều đúng và sai và đồng thời bạn nên viết autocomplete = "off" bên trong thẻ <form autocomplete = "off"> thay vào đó và điều này sẽ dừng hành vi tự động điền
demopix 18/12/18

2
Cũng hoạt động nếu bạn đặt autocomplete = "off" trên biểu mẫu (để thay đổi toàn bộ biểu mẫu mặc định đó) và sau đó chỉ cần đặt type = "search" trên <input>
John

9
Sau phiên bản Chrome 72.XX, bản sửa lỗi này không hoạt động. Tìm bản sửa lỗi mới nhất tại đây stackoverflow.com/a/55045439/1161998
Adheep Mohamed Abdul Kader

65

Thử cái này. Tôi biết câu hỏi hơi cũ, nhưng đây là một cách tiếp cận khác cho vấn đề.

Tôi cũng nhận thấy vấn đề đến ngay phía trên passwordlĩnh vực.

Tôi đã thử cả hai phương pháp như

<form autocomplete="off"><input autocomplete="off">không ai trong số họ làm việc cho tôi.

Vì vậy, tôi đã sửa nó bằng đoạn mã bên dưới - chỉ cần thêm một trường văn bản khác ngay phía trên trường loại mật khẩu và tạo nó display:none.

Một cái gì đó như thế này:

<input type="text" name="prevent_autofill" id="prevent_autofill" value="" style="display:none;" />
<input type="password" name="password_fake" id="password_fake" value="" style="display:none;" />
<input type="password" name="password" id="password" value="" />

Hy vọng nó sẽ giúp được ai đó.


1
Điều này làm việc cho tôi (bây giờ). Tôi đã phát hiện ra rằng tôi đã sử dụng khoảng nửa tá các bản hack khác nhau theo thời gian và sau một thời gian Chrome quyết định muốn đánh bại bản hack đó. Vì vậy, một cái mới là cần thiết, chẳng hạn như cái này. Trong ứng dụng của mình, tôi có một mẫu cập nhật hồ sơ với các trường email và mật khẩu được để trống trừ khi người dùng muốn thực hiện thay đổi. Nhưng khi Chrome tự động điền, nó đặt userid vào trường "xác nhận email", dẫn đến tất cả các loại điều kiện lỗi, dẫn đến các điều kiện lỗi tiếp theo, khi người dùng lo lắng về việc cố gắng làm đúng.
Jeffrey Simon

2
Giải thích nhanh về lý do tại sao hack này hoạt động (hiện tại): Chrome nhìn thấy loại đầu tiên = nhập mật khẩu và tự động điền và nó giả định rằng trường trực tiếp trước trường này PHẢI là trường người dùng và tự động điền trường đó với tên người dùng. @JeffreySimon điều này sẽ giải thích hiện tượng userid trong trường xác nhận email (tôi đã nhìn thấy điều tương tự trên biểu mẫu của mình).
MrBoJangles

1
@kentcdodds - không chắc ý của bạn về việc không còn hoạt động nữa. Jsbin của bạn không có trường mật khẩu nên tình huống khác. Tôi đã sử dụng giải pháp này trong nhiều năm và gần đây nhất tôi nhận thấy nó là cần thiết và nó đã hoạt động với tôi chỉ trong tuần trước (tháng 3 năm 2015).
mike nelson

1
Hoan hô! Một giải pháp có vẻ hiệu quả! Tôi sẽ khuyên bạn nên đặt tên cho lĩnh vực này passwordvà có actual_passwordcho lĩnh vực hợp pháp, vì Google dường như đang xem xét name. Tuy nhiên, điều này có nghĩa là Chrome sẽ không lưu mật khẩu, đây là chức năng tôi thực sự muốn . AAAAARRRRGHH!
rybo111

2
Cập nhật: Điều này tiếp tục hoạt động hơn một năm kể từ lần cuối cùng tôi thực hiện nó. Chúng tôi có thể có một người chiến thắng vững chắc ở đây.
MrBoJangles

48

Tôi không biết tại sao, nhưng điều này đã giúp và làm việc cho tôi.

<input type="password" name="pwd" autocomplete="new-password">

Tôi không biết tại sao, nhưng autocompelete = "new-password" sẽ vô hiệu hóa tự động điền. Nó hoạt động trong phiên bản chrome 49.0.2623.112 mới nhất .


Cập nhật chrome của tôi, và nó vẫn làm việc cho tôi. 50.0.2661.87 (64 bit)
Tauras

Thật không may, khi gửi biểu mẫu (hoặc khi các trường đầu vào bị ẩn / xóa), Chrome sau đó yêu cầu lưu thông tin đăng nhập đã thay đổi.
sibbl

Hoạt động trong Phiên bản 51.0.2704.79 m
Geoffrey Hale

thánh f *** tại sao điều này làm việc? Đó có phải là một lỗi không? bởi vì tôi đã kiểm tra nó ở đây và chỉ đặt nó trong một đầu vào và hoạt động cho cả đăng nhập và mật khẩu đầu vào, nhưng tôi chỉ đặt nó trong mật khẩu
Leandro RR

Tôi không có ý kiến. Tôi nghĩ rằng đó là một "thứ" chrome được tạo ra bởi các nhà phát triển. Có lẽ tôi đã nhầm.
Tauras

46

Đối với tôi, đơn giản

<form autocomplete="off" role="presentation">

Đã làm nó.

Đã thử nghiệm trên nhiều phiên bản, lần thử cuối cùng là vào ngày 56.0,2924.87


Đã thêm phiên bản @ArnoldRoa, nó đã có mặt trên trang web của chúng tôi kể từ ngày tôi đăng nó và có một vài phiên bản hoạt động tốt. Phiên bản bạn đang sử dụng? PC / Mac?
Kuf

Không hoạt động trên 57.0.2987.110. Chrome làm nổi bật màu vàng và điền trước trường bằng mật khẩu đã lưu của tôi. Nhưng trang này là trang quản lý người dùng, không phải trang đăng nhập.

1
@Dummy Tôi đã thử nghiệm nó ngay bây giờ trên chrome mới nhất (57) và nó vẫn hoạt động với tôi. Bạn đã làm gì đặc biệt với các trường đầu vào? nắp bạn đặt mã của bạn ở đâu đó tôi có thể cố gắng sao chép?
Kuf

3
Phiên bản 64.0.3282.186 (Bản dựng chính thức) (64-bit) Windows. 2018-03-01 KHÔNG LÀM VIỆC để vô hiệu hóa tự động điền.
billy jean

2
Khá chắc chắn rằng điều này sẽ loại bỏ biểu mẫu / đầu vào khỏi các công nghệ hỗ trợ w3c.github.io/USE-aria/#ariapresentation
Olex Ponomarenko


19

Nó rất đơn giản và khó khăn :)

google chrome về cơ bản tìm kiếm mọi phần tử mật khẩu có thể nhìn thấy đầu tiên bên trong <form>, <body><iframe>thẻ để kích hoạt tính năng tự động nạp tiền cho họ, vì vậy để vô hiệu hóa này, bạn cần phải thêm một yếu tố mật khẩu giả như sau:

    • nếu phần tử mật khẩu của bạn bên trong <form>thẻ, bạn cần đặt phần tử giả làm phần tử đầu tiên trong biểu mẫu của mình ngay sau khi <form>mở thẻ

    • nếu phần tử mật khẩu của bạn không nằm trong <form>thẻ, hãy đặt phần tử giả làm phần tử đầu tiên trong trang html của bạn ngay sau khi <body>mở thẻ

  1. Bạn cần ẩn phần tử giả mà không sử dụng css display:nonevì vậy về cơ bản hãy sử dụng phần tử giả như một phần tử mật khẩu.

    <input type="password" style="width: 0;height: 0; visibility: hidden;position:absolute;left:0;top:0;"/>

1
Tuyệt vời, làm thế nào bạn tìm ra thuật toán của Chrome? Tôi mới phát hiện ra rằng phương thức cũ của tôi thay đổi giá trị bằng JS sau khi trang được tải với bộ đếm thời gian setTimeout không hoạt động nữa. Nhưng điều này hoạt động hoàn hảo!

Thật không may, không hoạt động cho các đầu vào TextBox thông thường.
eYe

1
thực tế nó đang hoạt động chỉ cần đặt thuộc tính tên;)
Fareed Alnamrouti

Trên Chrome 58, điều này không hoạt động. Sử dụng chiều rộng: 1px. Nếu trường mật khẩu bị ẩn hoàn toàn, thì Chrome sẽ tự động điền bình thường. Ngoài ra chỉ số z: -999 có thể hữu ích để nó không trùng lặp bất kỳ nội dung nào.
cristiancastrodc

1
Hoạt động trên Chrome 67.0 trên thành phần html góc cạnh<form *ngIf="!loggedIn()" #loginForm="ngForm" class="navbar-form navbar-right" (ngSubmit)="login()"><input type="password" style="width: 0;height: 0; visibility: hidden;position:absolute;left:0;top:0;"/><input type="text" #username="ngModel" placeholder="Username" class="form-control" required autocomplete="off" name="username" [(ngModel)]="model.username"><input type="password" #password="ngModel" placeholder="Password" class="form-control" required autocomplete="off" name="password" [(ngModel)]="model.password">...
Junior Mayhé

19

Dưới đây là các giải pháp được đề xuất của tôi, vì Google đang khăng khăng ghi đè mọi công việc xung quanh mà mọi người dường như thực hiện.

Tùy chọn 1 - chọn tất cả văn bản khi nhấp

Đặt các giá trị của đầu vào thành một ví dụ cho người dùng của bạn (ví dụ your@email.com) hoặc nhãn của trường (ví dụ Email) và thêm một lớp được gọi focus-selectvào đầu vào của bạn:

<input type="text" name="email" class="focus-select" value="your@email.com">
<input type="password" name="password" class="focus-select" value="password">

Và đây là jQuery:

$(document).on('click', '.focus-select', function(){
  $(this).select();
});

Tôi thực sự không thể thấy Chrome bao giờ rối tung với các giá trị. Điều đó thật điên rồ. Vì vậy, hy vọng đây là một giải pháp an toàn.

Tùy chọn 2 - đặt giá trị email thành khoảng trắng, sau đó xóa nó

Giả sử bạn có hai đầu vào, chẳng hạn như email và mật khẩu, đặt giá trị của trường email thành " "(một khoảng trắng) và thêm thuộc tính / giá trị autocomplete="off", sau đó xóa điều này bằng JavaScript. Bạn có thể để trống giá trị mật khẩu.

Nếu người dùng không có JavaScript vì một số lý do, hãy đảm bảo bạn cắt bớt phía máy chủ đầu vào của họ (có lẽ bạn vẫn nên như vậy), trong trường hợp họ không xóa khoảng trống.

Đây là jQuery:

$(document).ready(function() {
  setTimeout(function(){
    $('[autocomplete=off]').val('');
  }, 15);
});

Tôi đặt thời gian chờ là 155 dường như thỉnh thoảng hoạt động trong các thử nghiệm của mình, vì vậy việc đánh số này có vẻ như là một vụ cá cược an toàn.

Không đặt giá trị ban đầu thành không gian dẫn đến Chrome sẽ khiến đầu vào có màu vàng, như thể nó đã tự động điền.

Tùy chọn 3 - đầu vào ẩn

Đặt cái này ở đầu mẫu:

<!-- Avoid Chrome autofill -->
<input name="email" class="hide">

CSS:

.hide{ display:none; }

Đảm bảo bạn giữ ghi chú HTML để các nhà phát triển khác của bạn không xóa nó! Cũng đảm bảo tên của đầu vào ẩn có liên quan.


@Vaia - bạn đã thử điều hướng đến một trang khác và sau đó nhấn nút quay lại? Tôi nhận được kết quả hỗn hợp - nó có thể cần điều chỉnh.
rybo111

Tôi chưa thử tùy chọn 1 nếu bạn muốn nói điều đó. Ngoài ra, tôi chỉ cần vô hiệu hóa tính năng tự động điền trên một chế độ được tải ajax sẽ không được gọi bằng nút quay lại. Nhưng nếu có kết quả khác, tôi sẽ nói với bạn. @ rybo111
AlexioVay

@Vaia Ý tôi là tùy chọn 2 - vui lòng trả lời ở đây nếu bạn gặp bất kỳ vấn đề nào. Cảm ơn.
rybo111

15

Sử dụng css text-security: đĩa mà không sử dụng type = password .

html

<input type='text' name='user' autocomplete='off' />
<input type='text' name='pass' autocomplete='off' class='secure' />

or

<form autocomplete='off'>
    <input type='text' name='user' />
    <input type='text' name='pass' class='secure' />
</form>

css

input.secure {
    text-security: disc;
    -webkit-text-security: disc;
}

Cách tiếp cận tốt nhất tôi tìm thấy cho đến nay! tốt, ít nhất là cho Chrome 64: /
scipper

Đối với mục đích của tôi, điều này là hoàn hảo, cảm ơn bạn! Chrome không tự động điền hoặc tự động hoàn tất, không cung cấp để lưu nó và nó không chỉ bị che khuất khỏi tầm nhìn mà còn từ bảng tạm - Tôi đã sao chép những gì tôi đã nhập và dán vào notepad và chỉ nhận được "••• •••••••• ". Xuất sắc!
Doug McLean

15

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 tự động hoàn thành là gán một chuỗi ngẫu nhiên cho thuộc tính , ví dụ:

autocomplete="nope"

RE: 'hành vi bất ngờ' Hành vi này được thúc đẩy bởi Google, người tin rằng họ biết rõ hơn các nhà phát triển về cách mỗi trang hoạt động. Đôi khi tôi chỉ muốn một đầu vào mật khẩu thô, không rườm rà.
Thường xuyên Joe

3
sự kết hợp này FINALLY hoạt động với tôi: vai trò = "bản trình bày" autocomplete = "nope" đã được thử nghiệm trên Chrome Phiên bản 64.0.3282.186 (Bản dựng chính thức) (64-bit). Thật là một cơn ác mộng!
billy jean

2
Chuỗi ngẫu nhiên hoạt động cho chrome nhưng không phải firefox. Để hoàn thiện, tôi sử dụng cả "autocomplete = 'off-no-perfect'" và đặt thuộc tính chỉ đọc với một onf Focus = "this.readOnly = false". Ứng dụng của tôi là một ứng dụng dành cho doanh nghiệp mà người dùng sử dụng để nhập hàng ngàn địa chỉ, vì vậy trường hợp sử dụng để kiểm soát điều này là có thật - Tôi cũng có thể đảm bảo việc sử dụng Javascript, vì vậy ít nhất tôi đã nhận được điều đó cho tôi
ChronoFish

13

Tôi đã thấy rằng việc thêm tính năng này vào biểu mẫu sẽ ngăn Chrome sử dụng Tự động điền.

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

Tìm thấy ở đây. https://code.google.com.vn/p/chromium/issues/detail?id=468153#hc41

Thực sự đáng thất vọng khi Chrome đã quyết định rằng nó biết rõ hơn nhà phát triển về thời điểm Tự động hoàn thành. Có một cảm giác thực sự của Microsoft với nó.


Đó thực sự không phải là sự thật mà bạn nói Ngăn chặnChromAutocomplete. Tôi đã có thể khiến autocomplete hoạt động bằng cách nói autocomplete = "off" và name = "somename". Nhưng điều này chỉ hoạt động nếu bạn đặt tên cho hai đầu vào khác nhau cùng tên. Vì vậy, trong trường hợp của bạn, ElimChromAutocomplete phải được áp dụng cho hai đầu vào khác nhau. Rất lạ ...
Joe Heyming

11
<input readonly onfocus="this.removeAttribute('readonly');" type="text">

thêm thuộc tính chỉ đọc vào thẻ cùng với sự kiện onf Focus loại bỏ nó sẽ khắc phục sự cố


Giải pháp này hoạt động trên các trường văn bản
Denis Slonovschi

9

Đối với combo mật khẩu tên người dùng, đây là một vấn đề dễ giải quyết. Chrome heuristic tìm mẫu:

<input type="text">

theo dõi bởi:

<input type="password">

Đơn giản chỉ cần phá vỡ quá trình này bằng cách vô hiệu hóa điều này:

<input type="text">
<input type="text" onfocus="this.type='password'">

Thật không may, điều này áp dụng cho nhiều thứ hơn là chỉ những thứ tên người dùng / mật khẩu. Chrome sẽ xem xét văn bản giữ chỗ để suy luận những gì cần đề xuất. Ví dụ: jsbin.com/jacizu/2/edit
kentcdodds 20/03/2015

Điều hợp lệ là bạn vẫn có thể điền vào các trường bằng các đề xuất của trình duyệt như ví dụ của bạn chứng minh, vì vậy điều này không thực sự giải quyết vấn đề OP. Giải pháp này, chỉ ngăn trình duyệt "tự động" điền tên người dùng và mật khẩu kết hợp như trong ví dụ bằng câu trả lời hàng đầu. Điều này có thể được sử dụng cho một số người, nhưng không phải là giải pháp cuối cùng để chỉ vô hiệu hóa tự động hoàn thành, mà sẽ phải đến từ Google.
Bernesto

4
Mặc dù, nếu bạn thêm một khoảng trắng phía trước văn bản giữ chỗ của bạn, nó cũng sẽ vô hiệu hóa đề xuất tự động dựa trên giữ chỗ. Chắc chắn là một hack, mặc dù không nhiều hơn các đề xuất khác. jsbin.com/pujasu/1/edit
Bernesto

thực ra ... nó có vẻ hoạt động với ví dụ của bạn, nhưng vì một số lý do, nó không hoạt động với tôi :-(
kentcdodds

Hà! Đó là lý do tại sao nó được gọi là hack ... Bạn có một ví dụ bạn có thể chia sẻ khi nó không hoạt động không?
Bernesto

8

Mike Nelsons cung cấp giải pháp không hoạt động với tôi trong Chrome 50.0.2661.102 m. Chỉ cần thêm một yếu tố đầu vào cùng loại với màn hình: không có bộ nào không còn vô hiệu hóa trình duyệt tự động hoàn tất. Bây giờ cần phải nhân đôi thuộc tính tên của trường đầu vào mà bạn muốn tắt tự động hoàn thành.

Ngoài ra, để tránh trường trùng lặp được sao chép khi chúng nằm trong phần tử biểu mẫu, bạn nên đặt một phần tử bị vô hiệu hóa trên phần tử không được hiển thị. Điều này sẽ ngăn phần tử đó được gửi như một phần của hành động biểu mẫu.

<input name="dpart" disabled="disabled" type="password" style="display:none;">
<input name="dpart" type="password">
<input type="submit">

Vào tháng 6 năm 2016 và Chrome 51.0.2704.106 m, đây là giải pháp hoạt động duy nhất tại đây
Denis

Nhưng biểu mẫu sẽ chọn trường nhập đúng (hiển thị) mà bạn cần sau đó? Bởi vì nó cùng tên.
AlexioVay

@Vaia, việc thêm thuộc tính bị vô hiệu hóa vào thành phần trùng lặp sẽ khiến nó không được gửi.
mccainz

8

Năm 2016, Google Chrome đã bắt đầu bỏ qua autocomplete=offmặc dù nó ở trong W3C. Câu trả lời họ đăng :

Phần khó khăn ở đây là một nơi nào đó trong suốt hành trình của web autocomplete = off trở thành mặc định cho nhiều trường biểu mẫu, mà không có bất kỳ suy nghĩ thực sự nào được đưa ra về việc liệu điều đó có tốt cho người dùng hay không. Điều này không có nghĩa là không có trường hợp rất hợp lệ khi bạn không muốn dữ liệu tự động điền trình duyệt (ví dụ: trên các hệ thống CRM), nhưng nhìn chung, chúng tôi coi đó là những trường hợp thiểu số. Và do đó, chúng tôi đã bắt đầu bỏ qua tính năng tự động hoàn thành = tắt cho dữ liệu Tự động điền của Chrome.

Về cơ bản nói rằng: chúng tôi biết rõ hơn những gì người dùng muốn.

Họ đã mở một lỗi khác để đăng các trường hợp sử dụng hợp lệ khi yêu cầu tự động hoàn thành = tắt

Tôi chưa thấy các sự cố được kết nối với tự động hoàn tất thông qua tất cả ứng dụng B2B của mình nhưng chỉ với đầu vào của loại mật khẩu.

Tự động điền các bước trong nếu có bất kỳ trường mật khẩu nào trên màn hình ngay cả một trường ẩn. Để phá vỡ logic này, bạn có thể đặt từng trường mật khẩu vào dạng riêng của nó nếu nó không phá vỡ logic trang của riêng bạn.

<input type=name >

<form>
    <input type=password >
</form>

4
Vì câu trả lời của bạn là câu trả lời gần đây nhất, bạn có thể vui lòng thêm rằng thêm autocomplete="pineapple"hoặc một số từ vô nghĩa khác dường như cũng khắc phục vấn đề không? Ít nhất, nó đã làm vào cuối của tôi!
Douwe de Haan

1
@DouwedeHaan điều này là tốt cho đến khi biểu mẫu được lưu, sau đó tự động hoàn thành sẽ cung cấp các đề xuất cho trường 'dứa' đã lưu. Nhưng có lẽ sử dụng hàm băm ngẫu nhiên cho giá trị tự động hoàn thành chẳng hạn sẽ làm tròn điều này?
đào

@digout Tôi đồng ý. Một ví dụ điển hình là sử dụng UUID cho loại công cụ này. Chỉ cần chắc chắn rằng chuỗi là duy nhất!
Douwe de Haan

7

Nếu bạn gặp vấn đề với việc giữ chỗ nhưng vô hiệu hóa tính năng tự động điền chrome, tôi đã tìm thấy cách giải quyết này.

Vấn đề

HTML

<div class="form">
    <input type="text" placeholder="name"><br>
    <input type="text" placeholder="email"><br>
    <input type="text" placeholder="street"><br>
</div>

http://jsfiddle.net/xmbvwfs6/1/

Ví dụ trên vẫn tạo ra sự cố tự động điền, nhưng nếu bạn sử dụng required="required"và một số CSS, bạn có thể sao chép trình giữ chỗ và Chrome sẽ không nhận thẻ.

Giải pháp

HTML

<div class="form">
    <input type="text" required="required">
    <label>Name</label>  
    <br>
    <input type="text" required="required">
    <label>Email</label>    
    <br>
    <input type="text" required="required">
    <label>Street</label>    
    <br>
</div>

CSS

input {
    margin-bottom: 10px;
    width: 200px;
    height: 20px;
    padding: 0 10px;
    font-size: 14px;
}
input + label {
    position: relative;
    left: -216px;
    color: #999;
    font-size: 14px;
}
input:invalid + label { 
    display: inline-block; 
}
input:valid + label { 
    display: none; 
}

http://jsfiddle.net/mwshpx1o/1/


Đây là giải pháp duy nhất thực sự hoạt động. Tôi thực sự không thích nó, nhưng đó là trạng thái
nhàu nát

Như năm 2017, cái này vẫn hoạt động tốt. Nó chỉ cần tập lệnh này để buộc inputtập trung nếu người dùng nhấp vào trình giữ chỗ "giả mạo": $("label").on("click",function(){ $(this).prev().focus(); });Lưu ý rằng labelkhông thể có trước khi input... Chrome tìm thấy nó! Giải pháp sáng tạo tốt đẹp! +1
Louys Patrice Bessette

7

Tôi thực sự không thích tạo ra các trường ẩn, tôi nghĩ rằng làm cho nó như thế sẽ trở nên thực sự khó hiểu rất nhanh.

Trên các trường đầu vào mà bạn muốn dừng tự động hoàn thành, nó sẽ hoạt động. Làm cho các trường chỉ đọc và tập trung loại bỏ thuộc tính đó như thế này

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

Điều này là gì trước tiên bạn phải loại bỏ thuộc tính chỉ đọc bằng cách chọn trường và tại thời điểm đó rất có thể bạn sẽ nhập vào với đầu vào người dùng của riêng bạn và khom lưng tự động điền để tiếp quản


1
Thật không may, điều này không còn hoạt động :-( jsbin.com/sobise/edit?html,css,output
kentcdodds 20/03/2015

7

Các giá trị được nhập trước đó được lưu trong bộ nhớ cache của chrome được hiển thị dưới dạng danh sách chọn thả xuống. Điều này có thể bị vô hiệu hóa bởi autocomplete = off, địa chỉ được lưu rõ ràng trong cài đặt nâng cao của chrome sẽ bật tự động điền khi trường địa chỉ được lấy nét. Điều này có thể bị vô hiệu hóa bởi autocomplete = "false" .Nhưng nó sẽ cho phép chrome hiển thị các giá trị được lưu trong bộ nhớ cache.

Trên một trường html đầu vào sau đây sẽ tắt cả hai.

Role="presentation" & autocomplete="off"

Trong khi chọn các trường đầu vào để tự động điền địa chỉ, Chrome sẽ bỏ qua các trường đầu vào không có phần tử html nhãn trước đó.

Để đảm bảo trình phân tích cú pháp chrome bỏ qua trường nhập cho cửa sổ bật lên địa chỉ tự động điền, có thể thêm nút ẩn hoặc điều khiển hình ảnh giữa nhãn và hộp văn bản. Điều này sẽ phá vỡ chuỗi phân tích chrome của việc tạo cặp thông số nhãn cho tự động điền. Các hộp kiểm được bỏ qua trong khi phân tích cú pháp cho các trường địa chỉ

Chrome cũng xem xét thuộc tính "cho" trên thành phần nhãn. Nó có thể được sử dụng để phá vỡ chuỗi phân tích của chrome.


Tôi mến bạn. Giải pháp duy nhất trên trang này thực sự hoạt động.
Ngày Davis Waterbury

Không hoạt động trong năm 2020.
Kai Noack

7

Vì tất cả chúng ta đều có vấn đề này, tôi đã đầu tư một chút thời gian để viết một phần mở rộng jQuery hoạt động cho vấn đề này. Google phải theo dõi đánh dấu html, không phải chúng tôi theo dõi Google

(function ($) {

"use strict";

$.fn.autoCompleteFix = function(opt) {
    var ro = 'readonly', settings = $.extend({
        attribute : 'autocomplete',
        trigger : {
            disable : ["off"],
            enable : ["on"]
        },
        focus : function() {
            $(this).removeAttr(ro);
        },
        force : false
    }, opt);

    $(this).each(function(i, el) {
        el = $(el);

        if(el.is('form')) {
            var force = (-1 !== $.inArray(el.attr(settings.attribute), settings.trigger.disable))
            el.find('input').autoCompleteFix({force:force});
        } else {
            var disabled = -1 !== $.inArray(el.attr(settings.attribute), settings.trigger.disable);
            var enabled = -1 !== $.inArray(el.attr(settings.attribute), settings.trigger.enable);
            if (settings.force && !enabled || disabled)
                el.attr(ro, ro).focus(settings.focus).val("");
        }
    });
};
})(jQuery);

Chỉ cần thêm tệp này vào một tệp như /js/jquery.extends.js và đưa nó qua jQuery. Áp dụng nó cho từng thành phần biểu mẫu khi tải tài liệu như thế này:

$(function() {
    $('form').autoCompleteFix();
});

jsfiddle với các bài kiểm tra


6

Hãy thử jQuerymã sau đây đã làm việc cho tôi.

if ($.browser.webkit) {
    $('input[name="password"]').attr('autocomplete', 'off');
    $('input[name="email"]').attr('autocomplete', 'off');
}

giải pháp tuyệt vời tuyệt vời
DKR

Bạn chỉ có thể thêm autocomplete="off"vào trường đầu vào thay vì sử dụng jquery. Và nhân tiện, điều này không hoạt động. Đề xuất mật khẩu Chrome vẫn đang hiển thị.
Kai Noack

6

Có hai mảnh này. Chrome và các trình duyệt khác sẽ ghi nhớ các giá trị đã nhập trước đó cho tên trường và cung cấp danh sách tự động hoàn thành cho người dùng dựa trên điều đó (đáng chú ý là các đầu vào loại mật khẩu không bao giờ được nhớ theo cách này, vì những lý do khá rõ ràng). Bạn có thể thêm autocomplete="off"để ngăn chặn điều này trên những thứ như trường email của bạn.

Tuy nhiên, sau đó bạn có mật khẩu điền. Hầu hết các trình duyệt đều có các triển khai tích hợp riêng và cũng có nhiều tiện ích của bên thứ ba cung cấp chức năng này. Điều này, bạn không thể dừng lại. Đây là người dùng tự lựa chọn để lưu thông tin này để tự động điền vào sau và hoàn toàn nằm ngoài phạm vi và phạm vi ảnh hưởng của ứng dụng của bạn.


Phần đầu tiên của câu trả lời này dường như không còn đúng nữa: Chrome Bug
Joshua Drake

Tôi không chắc chắn những gì bạn đang về. "Lỗi" đó chỉ là một trình giữ chỗ cho Chromium để thu thập các trường hợp sử dụng của mọi người cho autocomplete="off". Có thể mục đích là loại bỏ nó, nhưng điều đó chưa bao giờ được tuyên bố rõ ràng, và chắc chắn không có gì đòi hỏi bước nhảy vọt về tinh thần đó. Họ có thể chỉ muốn xem xét các cách khác hoặc tốt hơn để điều trị nó. Bất kể, nó vẫn là một phần của thông số kỹ thuật, và một lần nữa, không có dấu hiệu nào cho thấy nó sẽ rời khỏi thông số kỹ thuật. Và, nó vẫn hoạt động trong tất cả các trình duyệt theo như tôi biết, kể cả Chrome.
Chris Pratt

Chúng tôi có một vài trường hợp trong đó autocomplete = "off" không được Chrome tôn trọng.
Joshua Drake

1. Một vài trường hợp giai thoại không đủ bằng chứng. 2. Như tôi đã nói trong câu trả lời của mình, điền vào các phần mở rộng và những thứ tương tự có thể không và thường không tôn trọng điều này. Cuối cùng, giống như tất cả mọi thứ, nó phụ thuộc vào khách hàng, và do đó là người dùng. Tất cả những gì bạn có thể làm là đề nghị rằng nó không nên được tự động điền.
Chris Pratt


6

Bằng cách thiết lập autocompleteđể offhoạt động ở đây, tôi có một ví dụ được sử dụng bởi google trong trang tìm kiếm. Tôi tìm thấy điều này từ kiểm tra yếu tố.

nhập mô tả hình ảnh ở đây

chỉnh sửa : Trong trường hợp offkhông hoạt động thì hãy thử falsehoặc nofill. Trong trường hợp của tôi, nó đang hoạt động với phiên bản chrome 48.0


5

Đây là một hack bẩn -

Bạn có phần tử của bạn ở đây (thêm thuộc tính bị vô hiệu hóa):

<input type="text" name="test" id="test" disabled="disabled" />

Và sau đó ở cuối trang web của bạn đặt một số JavaScript:

<script>
    setTimeout(function(){
        document.getElementById('test').removeAttribute("disabled");
        },100);
</script>

5

Giải pháp khác nhau, dựa trên webkit. Như đã đề cập, bất cứ khi nào Chrome tìm thấy trường mật khẩu, nó sẽ tự động hoàn tất email. AFAIK, điều này là bất kể tự động hoàn thành = [bất cứ điều gì].

Để phá vỡ điều này, hãy thay đổi kiểu nhập thành văn bản và áp dụng phông bảo mật của bộ webkit dưới bất kỳ hình thức nào bạn muốn.

.secure-font{
-webkit-text-security:disc;}

<input type ="text" class="secure-font">

Từ những gì tôi có thể thấy, điều này ít nhất là an toàn như kiểu nhập = mật khẩu, nó sao chép và dán an toàn. Tuy nhiên, nó dễ bị tổn thương bằng cách xóa kiểu sẽ xóa dấu hoa thị, tất nhiên kiểu nhập = mật khẩu có thể dễ dàng thay đổi thành kiểu nhập = văn bản trong bảng điều khiển để tiết lộ bất kỳ mật khẩu tự động nào để nó thực sự giống nhau.


Cảm ơn bạn! Đây là điều duy nhất hoạt động trong chrome 49. Các phương thức trước đây đã bị phá vỡ vì chrome dường như lấp đầy tất cả các đầu vào với type="password"bây giờ.
epelc

4

Cách duy nhất phù hợp với tôi là: (Yêu cầu jQuery)

$(document).ready(function(e) {
    if ($.browser.webkit) {
        $('#input_id').val(' ').val('');
    }
});

4

Tôi đã đối mặt với cùng một vấn đề. Và đây là giải pháp để vô hiệu hóa tự động điền tên người dùng và mật khẩu trên Chrome (chỉ được thử nghiệm với Chrome)

    <!-- Just add this hidden field before password as a charmed solution to prevent auto-fill of browser on remembered password -->
    <input type="tel" hidden />
    <input type="password" ng-minlength="8" ng-maxlength="30" ng-model="user.password" name="password" class="form-control" required placeholder="Input password">

sửa chữa kỳ lạ nhưng bằng cách nào đó đó là điều duy nhất phù hợp với tôi trên chrome 48 :)
Jacka
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.