Chrome bỏ qua chế độ tự động hoàn thành = tắt off


443

Tôi đã tạo một ứng dụng web sử dụng hộp thả xuống. Điều này hoạt động tuyệt vời trong tất cả các trình duyệt ngoại trừ trình duyệt Chrome (Phiên bản 21.0.1180.89).

Mặc dù cả hai inputtrường VÀ formtrường có autocomplete="off"thuộc tính, Chrome vẫn khăng khăng hiển thị lịch sử thả xuống của các mục trước đó cho trường, thứ đang xóa sạch danh sách hộp thẻ.


10
Về mặt kỹ thuật, câu hỏi này đã được hỏi khoảng 5 tháng trước khi câu hỏi được gọi là "Câu hỏi này đã có câu trả lời ở đây". Đó là một bản sao như sau này.
dùng3071434

Câu trả lời:


318

CẬP NHẬT

Có vẻ như bây giờ Chrome bỏ qua các thuộc tính style="display: none;"hoặc style="visibility: hidden;.

Bạn có thể thay đổi nó thành một cái gì đó như:

<input style="opacity: 0;position: absolute;">
<input type="password" style="opacity: 0;position: absolute;">

Theo kinh nghiệm của tôi, Chrome chỉ tự động hoàn thành cái đầu tiên <input type="password">và cái trước <input>. Vì vậy, tôi đã thêm:

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

Đến đầu <form>và vụ việc đã được giải quyết.


54
Điều này không hoạt động nữa chrome 40 không hoạt động giải pháp này
user881703

8
Điều này không chỉ xấu, mà tôi vẫn không thể tìm thấy bất kỳ lời giải thích nào cho câu hỏi Tại sao ??
Augustin Riedinger

4
Có vẻ như Chrome bây giờ bỏ qua chúng nếu hiển thị: không sử dụng, vì vậy tôi đã di chuyển các trường ra khỏi chế độ xem với vị trí tuyệt đối ...
Christoph Leiter

1
display: none;sẽ biến mất phần tử, không có gì về tự động hoàn thành.
Sandun Perera

276

Ngăn tự động điền tên người dùng (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 ( có thể không hoạt động ):

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

Giải trình:

autocompletevẫn hoạt động trên <input>mặc dù có autocomplete="off", nhưng bạn có thể thay đổi offthành một chuỗi ngẫu nhiên, như thế nào nope.


Các "giải pháp" khác để vô hiệu hóa tự động hoàn thành của một trường (đó không phải là cách đúng để làm điều đó, nhưng nó hoạt động):

1.

HTML:

<input type="password" id="some_id" autocomplete="new-password">

JS (tải):

(function() {
    var some_id = document.getElementById('some_id');
    some_id.type = 'text';
    some_id.removeAttribute('autocomplete');
})();

hoặc sử dụng jQuery:

$(document).ready(function() {
    var some_id = $('#some_id');
    some_id.prop('type', 'text');
    some_id.removeAttr('autocomplete');
});

2.

HTML:

<form id="form"></form>

JS (tải):

(function() {
    var input = document.createElement('INPUT');
    input.type = 'text';
    document.getElementById('form').appendChild(input);
})();

hoặc sử dụng jQuery:

$(document).ready(function() {
    $('<input>', {
        type: 'text'
    }).appendTo($('#form'));
});

Để thêm nhiều trường bằng jQuery:

function addField(label) {
  var div = $('<div>');
  var input = $('<input>', {
    type: 'text'
  });
  
  if(label) {
    var label = $('<label>', {
      text: label
    });
    
    label.append(input);
    div.append(label);    
  } else {
    div.append(input);    
  }  
  
  div.appendTo($('#form'));
}

$(document).ready(function() {
  addField();
  addField('Field 1: ');  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form"></form>


Hoạt động trong:

  • Chrome: 49+

  • Firefox: 44+


Không có mã, làm thế nào để câu trả lời của bạn thực sự ngăn chặn tự động hoàn thành nếu autocomplete = "" được cho là chỉ chấp nhận một boolean
Tallboy

autocomplete = "new-password" khi được gán cho trường mật khẩu, hoạt động với tôi trong chrome. autocomplete = "tắt" trên biểu mẫu không.
Second2None

2
Điều quan trọng nhất (và duy nhất phù hợp với tôi) là đảm bảo tuyệt đối tài sản ID và Tên của trường <input> của bạn không chứa "Tên người dùng" hoặc "Mật khẩu". Điều này thực sự dừng tất cả tự động hoàn thành đối với tôi trên autocomplete = "tắt".
GONeale

new-passwordlà một cách bắt tốt cho bất kỳ đầu vào ẩn nào thực sự không phải là mật khẩu, cảm ơn
antongorodezkiy

Lol autocomplete="nope"thực sự làm việc cho tôi, trừ khi tôi thêm nó vào cả hai trường mẫu của mình. Giống như tôi có thể có nó trên một trong hai trường và sau đó trường đó sẽ không tự động hoàn thành, nhưng trường kia vẫn sẽ tự động hoàn tất, nhưng ngay sau khi tôi đặt nó vào cả hai trường, cả hai đều bắt đầu tự động hoàn thành lại.
PrintlnParams

147

Dường như Chrome bỏ qua autocomplete="off"trừ khi có trên <form autocomplete="off">thẻ.


Đối với React, sử dụng 'autoComplete = off.'
zero_cool

Để giải thích lý do tại sao Chrome thực hiện thay đổi này, hãy xem câu trả lời sau: stackoverflow.com/a/39689037/1766230 - Họ ưu tiên người dùng hơn các nhà phát triển.
Lu-ca

12
Nếu bạn muốn cung cấp cho nhóm Chrome những lý do hợp lệ để sử dụng autocomplete = "off", vui lòng làm như vậy tại đây: bug.chromium.org/p/chromium/issues/detail?id=587466
Chris

@Digggid Chrome 71 không bỏ qua thuộc tính, nhưng trong một số trường hợp, nó bỏ qua giá trị "tắt". Sử dụng một giá trị như "quốc gia" vẫn hoạt động đối với tôi.
Burak

1
Chỉ cần làm rõ ở trên là có báo cáo mâu thuẫn. Trên thẻ biểu mẫu thêm autocomplete = "off" và trên các thẻ đầu vào riêng lẻ thêm autocomplete = "new-password". Hoạt động như Chrome 75
AndyP9

83

Phương pháp hiện đại

Đơn giản chỉ cần làm cho đầu vào của bạn readonly, và tập trung, loại bỏ nó. Đây là một cách tiếp cận rất đơn giản và các trình duyệt sẽ không đưa readonlyvào đầu vào. Do đó, phương pháp này được chấp nhận và sẽ không bao giờ bị ghi đè bởi các bản cập nhật trình duyệt trong tương lai.

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

Phần tiếp theo là tùy chọn. Định kiểu đầu vào của bạn phù hợp để nó trông không giống readonlyđầu vào.

input[readonly] {
     cursor: text;
     background-color: #fff;
}

VÍ DỤ LÀM VIỆC


49
@Basit - Và đó là lý do tại sao tôi gọi nó là a modern approach. Chưa đến 1% người dùng trên thế giới tắt Javascript. Thành thật mà nói, nó không đáng để dành thời gian cho một đối tượng nhỏ như vậy khi phần lớn các trang web dựa vào Javascript. Đã phát triển các trang web trong một thời gian rất dài và 100% các trang web của tôi sử dụng Javascript và dựa vào nó rất nhiều. Nếu người dùng tắt Javascript, đó là vấn đề và sự lựa chọn của riêng họ, không phải của tôi. Họ sẽ không thể truy cập hoặc sử dụng ít nhất 90% các trang web trực tuyến khi nó bị tắt ... Downvote của bạn hoàn toàn không liên quan.
Fizzix

19
Điều này không hoạt động ngày hôm nay trong 49. Chrome "nhà phát triển" đang xem các giải pháp stackoverflow và xóa chúng.
puchu

7
Câu trả lời này từ tháng 9 năm 2015 về cơ bản là một bản sao từ câu trả lời vào tháng 11 năm 2014 trở xuống dưới đây.
dsuess

5
2019 - không hoạt động.
dùng2060451

1
Điều này sẽ phá vỡ trình đọc màn hình
Greg

80

Để có cách giải quyết đáng tin cậy, bạn có thể thêm mã này vào trang bố cục của mình:

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

Chrome tôn trọng autocomplete = off chỉ khi có ít nhất một yếu tố đầu vào khác trong biểu mẫu với bất kỳ giá trị tự động hoàn thành nào khác.

Điều này sẽ không hoạt động với các trường mật khẩu - những trường được xử lý rất khác nhau trong Chrome. Xem https://code.google.com.vn/p/chromium/issues/detail?id=468153 để biết thêm chi tiết.

CẬP NHẬT: Lỗi đã đóng là "Không sửa" bởi Nhóm Chromium ngày 11 tháng 3 năm 2016. Xem bình luận cuối cùng trong báo cáo lỗi được gửi ban đầu của tôi , để được giải thích đầy đủ. TL; DR: sử dụng các thuộc tính tự động hoàn thành ngữ nghĩa như autocomplete = "new-street-address" để tránh Chrome thực hiện tự động điền.


2
@Jonathan Cowley-Thom: hãy thử những trang thử nghiệm này tôi đưa lên có chứa cách giải quyết của tôi. Trên hub.securevideo.com/Support/AutocompleteOn , bạn sẽ thấy các đề xuất tự động hoàn thành của Chrome. Sau đó, hãy thử các mục tương tự trên hub.securevideo.com/Support/Autocomplete Offer . Bạn không nên xem các đề xuất tự động hoàn thành của Chrome. Tôi mới thử nghiệm điều này trên Chrome 45.0.2454.101m và 46.0.2490.71m và nó hoạt động như mong đợi trên cả hai.
JT Taylor

Thêm một cập nhật về vấn đề này: Tôi vừa nhận được thông báo từ nhóm Chrome rằng việc này đã được khắc phục. Vì vậy, hy vọng cách giải quyết này sẽ sớm không còn cần thiết nữa!
JT Taylor

Xem bài đăng của tôi ở trên: "Điều này sẽ không hoạt động với các trường mật khẩu - chúng được xử lý rất khác nhau trong Chrome. Xem code.google.com/p/chromium/issues/detail?id=468153 để biết thêm chi tiết."
JT Taylor

45

Chà, đến bữa tiệc muộn một chút, nhưng dường như có một chút hiểu lầm về việc autocompletenên và không nên làm việc như thế nào . Theo thông số kỹ thuật HTML, tác nhân người dùng (trong trường hợp này là Chrome) có thể ghi đè autocomplete:

https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribution

Tác nhân người dùng có thể cho phép người dùng ghi đè tên trường tự động điền của phần tử, ví dụ: thay đổi từ "tắt" thành "bật" để cho phép các giá trị được ghi nhớ và điền trước bất chấp sự phản đối của tác giả trang hoặc luôn luôn "tắt", không bao giờ nhớ các giá trị. Tuy nhiên, tác nhân người dùng không nên cho phép người dùng ghi đè một cách tầm thường tên trường tự động điền từ "tắt" sang "bật" hoặc vì các giá trị bảo mật quan trọng cho người dùng nếu tất cả các giá trị luôn được ghi nhớ, bất kể tùy chọn của trang web.

Vì vậy, trong trường hợp của Chrome, các nhà phát triển về cơ bản đã nói "chúng tôi sẽ để người dùng quyết định tùy chọn của họ cho dù họ muốn autocomplete làm việc hay không. Nếu bạn không muốn, đừng kích hoạt nó trong trình duyệt của bạn" .

Tuy nhiên, có vẻ như đây là một chút quá nhiệt tình về phần họ theo ý thích của tôi, nhưng nó là như vậy. Đặc điểm kỹ thuật cũng thảo luận về ý nghĩa bảo mật tiềm năng của một động thái như vậy:

Từ khóa "tắt" chỉ ra rằng dữ liệu đầu vào của điều khiển đặc biệt nhạy cảm (ví dụ mã kích hoạt cho vũ khí hạt nhân); hoặc đó là một giá trị sẽ không bao giờ được sử dụng lại (ví dụ: khóa một lần để đăng nhập ngân hàng) và do đó người dùng sẽ phải nhập dữ liệu rõ ràng mỗi lần, thay vì có thể dựa vào UA để điền trước giá trị cho anh ta; hoặc rằng tài liệu cung cấp cơ chế tự động hoàn thành của chính nó và không muốn tác nhân người dùng cung cấp các giá trị tự động hoàn thành.

Vì vậy, sau khi trải qua sự thất vọng giống như mọi người khác, tôi đã tìm ra một giải pháp phù hợp với mình. Nó tương tự như tĩnh mạch vớiautocomplete="false" câu trả lời.

Một bài viết của Mozilla nói về chính xác vấn đề này:

https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turn_off_form_autocompletion

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

Vì vậy, đoạn mã sau nên hoạt động:

autocomplete="nope"

Và mỗi thứ sau đây cũng nên như vậy:

autocomplete="false"
autocomplete="foo"
autocomplete="bar"

Vấn đề tôi thấy là tác nhân trình duyệt có thể đủ thông minh để tìm hiểu autocompletethuộc tính và áp dụng nó vào lần tiếp theo khi nó nhìn thấy biểu mẫu. Nếu nó làm điều này, cách duy nhất tôi có thể thấy để giải quyết vấn đề sẽ là thay đổi linh hoạtautocomplete giá trị thuộc tính khi trang được tạo.

Một điểm đáng nói là nhiều trình duyệt sẽ bỏ qua autocompletecác cài đặt cho các trường đăng nhập (tên người dùng và mật khẩu). Như bài viết của Mozilla nêu:

Vì lý do này, nhiều trình duyệt hiện đại không hỗ trợ autocomplete = "off" cho các trường đăng nhập.

  • Nếu một trang web đặt autocomplete = "off" cho một biểu mẫu và biểu mẫu bao gồm các trường nhập tên người dùng và mật khẩu, thì trình duyệt vẫn sẽ cung cấp để nhớ thông tin đăng nhập này và nếu người dùng đồng ý, trình duyệt sẽ tự động điền vào các trường đó vào lần tiếp theo người dùng truy cập trang này.
  • Nếu một trang web đặt autocomplete = "tắt" cho các trường nhập tên người dùng và mật khẩu, thì trình duyệt vẫn sẽ cung cấp để nhớ thông tin đăng nhập này và nếu người dùng đồng ý, trình duyệt sẽ tự động điền các trường đó vào lần tiếp theo người dùng truy cập trang này.

Đây là hành vi trong Firefox (kể từ phiên bản 38), Google Chrome (từ 34) và Internet Explorer (kể từ phiên bản 11).

Cuối cùng một thông tin nhỏ về việc thuộc tính thuộc về formphần tử hay inputphần tử. Thông số kỹ thuật một lần nữa có câu trả lời:

Nếu thuộc tính tự động hoàn thành bị bỏ qua, giá trị mặc định tương ứng với trạng thái thuộc tính tự động hoàn thành của chủ sở hữu mẫu của phần tử được sử dụng thay thế ("bật" hoặc "tắt"). Nếu không có chủ sở hữu biểu mẫu, thì giá trị "bật" được sử dụng.

Vì thế. Đặt nó trên biểu mẫu nên áp dụng cho tất cả các trường đầu vào. Đặt nó vào một yếu tố riêng lẻ nên áp dụng cho chỉ yếu tố đó (ngay cả khi không có yếu tố nào trên biểu mẫu). Nếuautocomplete không được đặt ở tất cả, nó mặc định là on.

Tóm lược

Để vô hiệu hóa autocompletetrên toàn bộ biểu mẫu:

<form autocomplete="off" ...>

Hoặc nếu bạn cần phải làm điều đó:

<form autocomplete="random-string" ...>

Để vô hiệu hóa autocompletetrên một thành phần riêng lẻ (bất kể cài đặt biểu mẫu có mặt hay không)

<input autocomplete="off" ...>

Hoặc nếu bạn cần phải làm điều đó:

<input autocomplete="random-string" ...>

Và hãy nhớ rằng các tác nhân người dùng nhất định có thể ghi đè ngay cả những nỗ lực chiến đấu khó khăn nhất của bạn để vô hiệu hóa autocomplete.


1
2019 - không hoạt động. Phiên bản 76.0
user2060451

1
@ user2060451 - cái gì không hoạt động? Tôi vừa thử nghiệm nó trong 76.0.3809.87 trên Windows và Mac. - cả hai thực hiện theo thông số kỹ thuật. như mô tả ở trên. Nếu bạn có thể cung cấp thêm một chút mô tả so với "không hoạt động", tôi có thể giúp bạn.
Hooligancat

1
Tôi chỉ cố gắng cung cấp (từ bàn điều khiển sau khi mọi thứ được tải và đặt nó ở phía máy chủ) một chuỗi ngẫu nhiên để tự động hoàn thành phần tử đầu vào, nó không hoạt động. Việc tự động hoàn thành = "tắt" để tạo thành phần tử cũng không hoạt động.
Nuryagdy Mustapayev


29

Chrome phiên bản 34 bây giờ bỏ qua autocomplete=off, xem này .

Rất nhiều cuộc thảo luận về việc đây là điều tốt hay điều xấu? Quan điểm của bạn là gì?


7
xin lỗi vì downvote ... đây không phải là trang thảo luận (thay vào đó hãy thử quora) và bạn không cung cấp câu trả lời. Cảm ơn các liên kết mặc dù.
thường

25

Trình duyệt không quan tâm đến tự động hoàn thành = tắt tự động hoặc thậm chí điền thông tin đăng nhập vào trường văn bản sai?

Tôi đã sửa nó bằng cách đặt trường mật khẩu thành chỉ đọc và kích hoạt nó, khi người dùng nhấp vào nó hoặc sử dụng phím tab cho trường này.

sửa lỗi tự động điền trình duyệt: chỉ đọc và đặt writeble vào tiêu điểm (khi nhấp chuột và tab qua các trường)

 <input type="password" readonly  
     onfocus="$(this).removeAttr('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

Nhân tiện, thêm thông tin về quan sát của tôi:

Đô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ó, đôi khi , ngay cả autocomplete = off cũng không thể ngă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.


2
thay vì sử dụng onf Focus, tôi sử dụng setTimeout để xóa chỉ đọc, vì vậy người dùng của tôi không thấy đầu vào chỉ đọc và không bao giờ tập trung vào nó!
Hippyjim 3/03/2015

23

Bạn có thể dùng autocomplete="new-password"

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

Hoạt động trong:

  • Chrome: 53, 54, 55
  • Firefox: 48, 49, 50

Điều này không thể làm việc, bởi vì chuỗi tự động hoàn thành đã được sửa. Trình duyệt sẽ nhớ mật khẩu mới cho lần tiếp theo.
bước

23

TL; DR: Nói với Chrome rằng đây là đầu vào mật khẩu mới và nó sẽ không cung cấp mật khẩu cũ dưới dạng đề xuất tự động hoàn thành:

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

autocomplete="off" không hoạt động do quyết định thiết kế - rất nhiều nghiên cứu cho thấy người dùng có thời gian hack mật khẩu lâu hơn và khó hơn nếu họ có thể lưu trữ chúng trong trình duyệt hoặc trình quản lý mật khẩu.

Thông số kỹ thuật cho autocomplete đã thay đổi và hiện hỗ trợ các giá trị khác nhau để giúp các biểu mẫu đăng nhập dễ dàng tự động hoàn thành:

<!-- Auto fills with the username for the site, even though it's email format -->
<input type="email" name="email" autocomplete="username">

<!-- current-password will populate for the matched username input  -->
<input type="password" autocomplete="current-password" />

Nếu bạn không cung cấp những Chrome này vẫn cố đoán và khi nào thì Chrome sẽ bỏ qua autocomplete="off".

Giải pháp là autocompletecác giá trị cũng tồn tại cho các hình thức đặt lại mật khẩu:

<label>Enter your old password:
    <input type="password" autocomplete="current-password" name="pass-old" />
</label>
<label>Enter your new password:
    <input type="password" autocomplete="new-password" name="pass-new" />
</label>
<label>Please repeat it to be sure:
    <input type="password" autocomplete="new-password" name="pass-repeat" />
</label>

Bạn có thể sử dụng autocomplete="new-password"cờ này để yêu cầu Chrome không đoán mật khẩu, ngay cả khi nó có một mật khẩu được lưu trữ cho trang web này.

Chrome cũng có thể quản lý mật khẩu cho các trang web trực tiếp bằng API thông tin đăng nhập , đây là một tiêu chuẩn và cuối cùng có thể sẽ có hỗ trợ chung.


5
Không phải là một lý do thực sự thuyết phục. Thực tế là người dùng muốn một cái gì đó không có nghĩa đó là một ý tưởng thông minh. Điều đó cũng tệ như nói rằng bạn sẽ cho phép mật khẩu một ký tự trong ứng dụng của mình vì người dùng thấy nó thuận tiện hơn. Đôi khi, an ninh hơn hẳn sự tiện lợi ...
Daniel Kotin

Tôi có một trường có tên là "ContactNoAlt" mà Chrome khăng khăng điền vào EmailAddress. Tự động bật / tắt tự động được ưu tiên nhưng công việc cần thiết ở mức độ thực tế vì Chrome có thể sử dụng được. Tự động hoàn thành hơn = "tắt" là một tiêu chuẩn - vì vậy điều gì làm cho các nhà phát triển Chrome tốt đến mức họ chỉ cảm thấy họ có thể bỏ qua các tiêu chuẩn - có lẽ một ngày nào đó Chrome sẽ quyết định một số đoạn HTML khác bất tiện .... (điều này đang bắt đầu để cảm thấy như IE5 / 6 de-ja-vu)
dunxz

Tôi là người dùng chrome và tôi không muốn hành vi này. Nó thậm chí còn không hỏi tôi trước khi nó tự động điền vào hộp mật khẩu đang bật lên để đảm bảo chỉ tôi mới có thể truy cập ứng dụng web liên quan. Lưu một số mật khẩu không có nghĩa là tự động hoàn thành tất cả mật khẩu.
Hippyjim 3/03/2015

3
Câu trả lời này (và hành vi của Google) bỏ qua thực tế rằng một trong những lý do chính bạn có thể muốn làm điều này là để thực hiện các hành vi tự động hoàn thành (ví dụ từ danh sách từ cơ sở dữ liệu) của riêng bạn.
squarelogic.hayden

bạn đang cố gắng bảo vệ một quyết định rõ ràng tồi tệ được thực hiện bởi chrome. Tôi đang thực hiện chính sách của công ty mà tôi không thể thay đổi. Vì vậy, bây giờ tôi phải chèn hack cho chrome. Họ hiện đang làm việc. Nếu họ sẽ ngừng làm việc thì công ty chúng tôi sẽ thay đổi trình duyệt mặc định cho nhân viên. Vì vậy, bây giờ chúng tôi có hành vi tương tự nhưng với các bản hack và các trang có thể bị hỏng trong các bản nâng cấp trong tương lai. Và nhìn thấy tất cả những câu trả lời ở đây, có rất nhiều nhà phát triển sử dụng những bản hack này. Làm tốt chrome.
Claudiu Creanga

23

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.


12

Autocomplete="Off" không làm việc nữa.

"Off"Ví dụ, hãy thử sử dụng một chuỗi ngẫu nhiên thay vìAutocomplete="NoAutocomplete"

Tôi hy vọng nó sẽ giúp.


5
Không hoạt động trong Chrome 73
just_user

10

Nhìn thấy chrome bỏ qua autocomplete="off", tôi giải quyết nó bằng một cách ngu ngốc đó là sử dụng "đầu vào giả" để lừa đảo chrome để lấp đầy nó thay vì lấp đầy cái "thật".

Thí dụ:

<input type="text" name="username" style="display:none" value="fake input" /> 
<input type="text" name="username" value="real input"/>

Chrome sẽ điền vào "đầu vào giả" và khi gửi, máy chủ sẽ lấy giá trị "đầu vào thực".


10

Tôi đang đăng câu trả lời này để mang lại một giải pháp cập nhật cho vấn đề này. Tôi hiện đang sử dụng Chrome 49 và không có câu trả lời nào cho công việc này. Tôi cũng đang tìm kiếm một giải pháp làm việc với các trình duyệt khác và các phiên bản trước.

Đặt mã này vào đầu mẫu của bạn

<div style="display: none;">
    <input type="text" autocomplete="new-password">
    <input type="password" autocomplete="new-password">
</div>

Sau đó, đối với trường mật khẩu thực của bạn, hãy sử dụng

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

Nhận xét câu trả lời này nếu điều này không còn hoạt động hoặc nếu bạn gặp sự cố với trình duyệt hoặc phiên bản khác.

Đồng ý:

  • Chrome: 49
  • Firefox: 44, 45
  • Cạnh: 25
  • Internet Explorer: 11

1
Thật không may, phiên bản Chrome 49.0.2623.87 và nó không hoạt động cho TextBox, tôi vẫn thấy tự động hoàn tất bật lên.
eYe

8

Đối với bất cứ ai đang tìm kiếm một giải pháp cho vấn đề này, cuối cùng tôi cũng tìm ra nó.

Chrome chỉ tuân theo chế độ tự động hoàn thành = "tắt" nếu trang là trang HTML5 (Tôi đang sử dụng XHTML).

Tôi đã chuyển đổi trang của mình sang HTML5 và vấn đề đã biến mất (facepalm).


6

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.


1
Tôi sẽ downvote: đã thử nghiệm trên chrome 60: điều này không ngăn được tự động hoàn thành ..
boly38

6

Cho đến tận tuần trước, hai giải pháp bên dưới dường như hoạt động cho Chrome, IE và Firefox. Nhưng với việc phát hành Chrome phiên bản 48 (và vẫn còn 49), chúng không còn hoạt động:

  1. Sau đây ở đầu biểu mẫu:
<input style="display:none" type="text" name="fakeUsername"/>
<input style="display:none" type="password" name="fakePassword"/>
  1. Sau đây trong phần tử nhập mật khẩu:

    tự động hoàn thành = "tắt"

Vì vậy, để nhanh chóng khắc phục điều này, lúc đầu, tôi đã cố gắng sử dụng một hack lớn ban đầu là thiết lập yếu tố nhập mật khẩu thành vô hiệu hóa và sau đó sử dụng setTimeout trong chức năng sẵn sàng tài liệu để kích hoạt lại.

setTimeout(function(){$('#PasswordData').prop('disabled', false);}, 50);

Nhưng điều này có vẻ rất điên rồ và tôi đã thực hiện thêm một số tìm kiếm và tìm thấy câu trả lời của @tibalts trong Vô hiệu hóa Tự động điền Chrome . Câu trả lời của anh ấy là sử dụng autocomplete = "new-password" trong mật khẩu nhập và điều này dường như hoạt động trên tất cả các trình duyệt (Tôi đã giữ bản sửa lỗi số 1 ở trên ở giai đoạn này).

Đây là liên kết trong cuộc thảo luận về nhà phát triển Google Chrome: https://code.google.com.vn/p/chromium/issues/detail?id=370363#c7


@JorgeSampayo Chỉ hoạt động trên đầu vào mật khẩu chứ không phải trên đầu vào văn bản.
eYe

6

autocomplete=off phần lớn bị bỏ qua trong các trình duyệt hiện đại - chủ yếu là do người quản lý mật khẩu, v.v.

Bạn có thể thử thêm autocomplete="new-password"nó không được hỗ trợ đầy đủ bởi tất cả các trình duyệt, nhưng nó hoạt động trên một số


6

autocomplete="off"thường làm việc, nhưng không phải lúc nào cũng vậy. Nó phụ thuộc namevào trường đầu vào. Các tên như "địa chỉ", 'email', 'tên' - sẽ được tự động hoàn thành (trình duyệt nghĩ rằng chúng giúp người dùng), khi các trường như "mã", "pin" - sẽ không được tự động hoàn thành (nếu autocomplete="off"được đặt)

Vấn đề của tôi là - tự động hoàn tất đã gây rối với trình trợ giúp địa chỉ google

Tôi đã sửa nó bằng cách đổi tên nó

từ

<input type="text" name="address" autocomplete="off">

đến

<input type="text" name="the_address" autocomplete="off">

Đã thử nghiệm trong chrome 71.


1
Tôi nghĩ rằng đây là cách mới nhất để loại bỏ tự động hoàn thành. làm việc vào năm 2020 tháng 5 trên chrome 81
NIKHIL CM


5

Không biết tại sao điều này hoạt động trong trường hợp của tôi, nhưng trên chrome tôi đã sử dụng autocomplete="none"và Chrome đã dừng đề xuất địa chỉ cho trường văn bản của tôi.


4

Kể từ Chrome 42, không có giải pháp / hack nào trong chuỗi này (kể từ 2015-05-21T12:50:23+00:00) hoạt động để vô hiệu hóa tự động hoàn thành cho một trường riêng lẻ hoặc toàn bộ biểu mẫu.

EDIT: Tôi thấy rằng bạn thực sự chỉ cần chèn một trường email giả vào biểu mẫu của mình (bạn có thể ẩn nó display: none) trước các trường khác để ngăn tự động hoàn tất. Tôi cho rằng chrome lưu trữ một số loại chữ ký biểu mẫu với mỗi trường tự động hoàn thành và bao gồm một trường email khác làm hỏng chữ ký này và ngăn tự động hoàn thành.

<form action="/login" method="post">
    <input type="email" name="fake_email" style="display:none" aria-hidden="true">
    <input type="email" name="email">
    <input type="password" name="password">
    <input type="submit">
</form>

Tin tốt là vì "chữ ký biểu mẫu" bị hỏng bởi điều này, không có trường nào được tự động hoàn thành, do đó không cần phải xóa JS để xóa các trường giả trước khi gửi.

Câu trả lời cũ:

Điều duy nhất tôi thấy vẫn còn khả thi là chèn hai trường giả loại email và mật khẩu trước các trường thực. Bạn có thể đặt chúng để display: noneẩn chúng đi (không đủ thông minh để bỏ qua các trường đó):

<form action="/login" method="post">
    <input type="email" name="fake_email" style="display:none" aria-hidden="true">
    <input type="password" name="fake_password" style="display:none" aria-hidden="true">
    <input type="email" name="email">
    <input type="password" name="password">
    <input type="submit">
</form>

Thật không may, các trường phải nằm trong biểu mẫu của bạn (nếu không cả hai bộ đầu vào đều được tự động điền). Vì vậy, để các trường giả thực sự bị bỏ qua, bạn sẽ cần một số JS để chạy trên biểu mẫu gửi để xóa chúng:

form.addEventListener('submit', function() {
    form.elements['fake_email'].value = '';
    form.elements['fake_password'].value = '';
});

Lưu ý từ phía trên rằng việc xóa giá trị bằng Javascript hoạt động để ghi đè tự động hoàn tất. Vì vậy, nếu việc mất hành vi phù hợp với JS bị vô hiệu hóa là có thể chấp nhận được, bạn có thể đơn giản hóa tất cả những điều này với một "polyfill" tự động hoàn thành của JS cho Chrome:

(function(document) {

    function polyfillAutocomplete(nodes) {

        for(var i = 0, length = nodes.length; i < length; i++) {

            if(nodes[i].getAttribute('autocomplete') === 'off') {

                nodes[i].value = '';
            }
        }
    }

    setTimeout(function() {

        polyfillAutocomplete(document.getElementsByTagName('input'));
        polyfillAutocomplete(document.getElementsByTagName('textarea'));

    }, 1);

})(window.document);

4

Tôi gặp vấn đề tương tự khi trường nhập liệu lấy tên hoặc email. Tôi đã đặt tự động hoàn thành = "tắt" nhưng Chrome vẫn buộc phải đề xuất. Hóa ra đó là vì văn bản giữ chỗ có dòng chữ "tên" và "email" trong đó.

Ví dụ

<input type="text" placeholder="name or email" autocomplete="off" />

Tôi đã khắc phục nó bằng cách đặt một khoảng trống có chiều rộng bằng không vào các từ trong trình giữ chỗ. Không còn tự động hoàn thành Chrome.

<input type="text" placeholder="nam&#8203;e or emai&#8203;l" autocomplete="off" />

4

Trong Chrome 48+, hãy sử dụng giải pháp này:

  1. Đặt các trường giả trước các trường thực:

    <form autocomplete="off">
      <input name="fake_email"    class="visually-hidden" type="text">
      <input name="fake_password" class="visually-hidden" type="password">
    
      <input autocomplete="off" name="email"    type="text">
      <input autocomplete="off" name="password" type="password">
    </form>
  2. Ẩn các trường giả mạo:

    .visually-hidden {
      margin: -1px;
      padding: 0;
      width: 1px;
      height: 1px;
      overflow: hidden;
      clip: rect(0 0 0 0);
      clip: rect(0, 0, 0, 0);
      position: absolute;
    }
  3. Bạn làm được rồi!

Ngoài ra điều này sẽ làm việc cho các phiên bản cũ hơn.


@yivo Hình như khác biệt duy nhất giữa câu trả lời của urs và og là các thẻ quan trọng! Vì vậy, tôi đã thêm chúng, vẫn không hoạt động. dropbox.com/s/24yaz6ut7ygkoql/ từ
Mike Purcell

@MikePurcell Bạn không cần phải autocomplete="off"trên formthẻ. Cũng cố gắng đặt đầu vào giả ngay sau formthẻ.
yivo

@Yivo: Đã thử các đề xuất của bạn, hoạt động tốt cho trường email, tuy nhiên việc thả xuống tự động điền vẫn xảy ra đối với trường mật khẩu. dropbox.com/s/5pm5hjtx1s7eqt3/ từ
Mike Purcell

3

Sau chrome v. 34, cài đặt autocomplete="off"tại <form>thẻ không hoạt động

Tôi đã thực hiện các thay đổi để tránh hành vi gây phiền nhiễu này:

  1. Xóa nameidnhập mật khẩu
  2. Đặt một lớp vào đầu vào (ví dụ passwordInput:)

(Cho đến nay, Chrome sẽ không đặt mật khẩu đã lưu vào đầu vào, nhưng hiện tại biểu mẫu đã bị hỏng)

Cuối cùng, để làm cho biểu mẫu hoạt động, hãy đặt mã này để chạy khi người dùng nhấp vào nút gửi hoặc bất cứ khi nào bạn muốn kích hoạt biểu mẫu gửi:

var sI = $(".passwordInput")[0];
$(sI).attr("id", "password");
$(sI).attr("name", "password");

Trong trường hợp của tôi, tôi đã sử dụng hav id="password" name="password"trong đầu vào mật khẩu, vì vậy tôi đặt chúng trở lại trước khi kích hoạt đệ trình.


3

Sau khi đã thử tất cả các giải pháp, đây là những gì dường như đang hoạt động cho phiên bản chrome: 45, với hình thức có trường mật khẩu:

 jQuery('document').ready(function(){
        //For disabling Chrome Autocomplete
        jQuery( ":text" ).attr('autocomplete','pre'+Math.random(0,100000000));
 });

3

Tôi vừa cập nhật lên Chrome 49giải pháp của Diogo Cid không hoạt động nữa.

Tôi đã thực hiện một cách giải quyết khác để ẩn và xóa các trường trong thời gian chạy sau khi trang được tải.

Chrome hiện bỏ qua cách giải quyết ban đầu khi áp dụng thông tin đăng nhập cho trường được hiển thị đầu tiên type="password"type="text"trường trước đó , vì vậy tôi đã ẩn cả hai trường bằng CSS visibility: hidden;

<!-- HTML -->
<form>
    <!-- Fake fields -->
    <input class="chromeHack-autocomplete">
    <input type="password" class="chromeHack-autocomplete">

    <input type="text" placeholder="e-mail" autocomplete="off" />
    <input type="password" placeholder="Password" autocomplete="off" />
</form>

<!-- CSS -->
.chromeHack-autocomplete {
    height: 0px !important;
    width: 0px !important;
    opacity: 0 !important;
    padding: 0 !important; margin: 0 !important;
}

<!--JavaScript (jQuery) -->
jQuery(window).load(function() {
    $(".chromeHack-autocomplete").delay(100).hide(0, function() {
        $(this).remove();
    });
});

Tôi biết rằng nó có vẻ không thanh lịch nhưng nó hoạt động.


2

tôi thấy giải pháp này là phù hợp nhất:

function clearChromeAutocomplete()
{
// not possible, let's try: 
if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) 
{
document.getElementById('adminForm').setAttribute('autocomplete', 'off'); 
setTimeout(function () {
        document.getElementById('adminForm').setAttribute('autocomplete', 'on'); 
}, 1500);
}
}

Nó phải được tải sau khi dom sẵn sàng, hoặc sau khi biểu mẫu kết xuất lại.


2

Mặc dù tôi đồng ý tự động hoàn thành nên là sự lựa chọn của người dùng, đôi khi Chrome quá nhiệt tình với nó (các trình duyệt khác cũng có thể như vậy). Chẳng hạn, trường mật khẩu có tên khác vẫn được điền tự động với mật khẩu đã lưu và trường trước đó được điền tên người dùng. Điều này đặc biệt hấp dẫn khi biểu mẫu là một hình thức quản lý người dùng cho một ứng dụng web và bạn không muốn tự động điền vào nó với thông tin đăng nhập của riêng bạn.

Chrome hoàn toàn bỏ qua autocomplete = "tắt" ngay bây giờ. Trong khi các bản hack JS có thể hoạt động tốt, tôi đã tìm thấy một cách đơn giản hoạt động tại thời điểm viết:

Đặt giá trị của trường mật khẩu thành ký tự điều khiển 8 ( "\x08"bằng PHP hoặc &#8;bằng HTML). Điều này dừng Chrome tự động điền vào trường vì nó có giá trị, nhưng không có giá trị thực tế nào được nhập vì đây là ký tự backspace.

Vâng, đây vẫn là một hack, nhưng nó hoạt động với tôi. YMMV.


Có vẻ như không hoạt động trong Chrome 40
mui xe

Tôi nghĩ rằng họ đã chọn bản hack này và bỏ qua các ký tự điều khiển trong giá trị, vì vậy giờ nó đánh giá là trống. Xem câu trả lời của @ ice-cream stackoverflow.com/a/16130452/752696 để biết giải pháp chính xác, cập nhật.
spikyjt

Trường hợp sử dụng tương tự ở đây: Làm việc với quản lý người dùng và có thông tin đăng nhập riêng được tự động điền. Tuy nhiên, vì đó là mã của riêng tôi và tôi sử dụng lại formđể tạo mới và chỉnh sửa người dùng hiện tại chỉ đơn giản là ghi đè inputcác giá trị thông qua JS đã tự động hoàn thành.
Nuala
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.