Hoặc Firefox xác định nơi mật khẩu/tên người dùng đi đâu?Tại sao Firefox tự động hoàn thành ngay cả với tên đầu vào khác nhau?
Nếu tôi thay đổi tên, id, tiêu đề, lớp của yếu tố đầu vào, Firefox sẽ tiếp tục điền bằng mật khẩu hoặc email.
Hoặc Firefox xác định nơi mật khẩu/tên người dùng đi đâu?Tại sao Firefox tự động hoàn thành ngay cả với tên đầu vào khác nhau?
Nếu tôi thay đổi tên, id, tiêu đề, lớp của yếu tố đầu vào, Firefox sẽ tiếp tục điền bằng mật khẩu hoặc email.
Nếu tôi hiểu mã nguồn của Firefox chính xác, trước tiên trình duyệt sẽ tìm kiếm các trường mật khẩu trong biểu mẫu. Nếu biểu mẫu chứa nhiều hơn 3 trường mật khẩu, chức năng tự động điền sẽ bỏ qua biểu mẫu đó.
Sau khi tìm thấy 1 đến 3 trường mật khẩu, trình duyệt sẽ tìm kiếm trường đăng nhập. Trình duyệt thực hiện tìm kiếm lạc hậu bắt đầu từ trường mật khẩu đầu tiên và giả định rằng trường đăng nhập là trường được tìm thấy đầu tiên của loại text
hoặc email
hoặc url
hoặc tel
hoặc number
.
Bước tiếp theo phụ thuộc nếu chúng tôi kiểm tra biểu mẫu khi tải trang hoặc khi gửi biểu mẫu. Nếu chúng tôi kiểm tra trong khi tải trang và có trường đăng nhập và chính xác MỘT trường mật khẩu, trường hợp rất đơn giản và trình duyệt có thể điền vào biểu mẫu.
Các trường hợp khác (gửi biểu mẫu hoặc nhiều hơn 1 trường mật khẩu) thực hiện một số logic "thông minh" để xác định trường mật khẩu nào chứa mật khẩu mới và mật khẩu cũ nào, có thể cập nhật mật khẩu đã lưu). Nếu bạn quan tâm đến chi tiết, hãy tải xuống mã nguồn và mở tệp toolkit/components/passwordmgr/nsLoginManager.js
. Các chức năng cần kiểm tra là _fillForm
, _getFormFields
và _getPasswordFields
.
Để tóm tắt, Firefox không cần bất kỳ ID, tên hoặc thuộc tính lớp nào để đoán trường nào là thông tin đăng nhập hoặc mật khẩu. Nó chỉ dựa vào các loại và thứ tự của các trường biểu mẫu.
Đó có phải là hai yếu tố duy nhất trên biểu mẫu không? Firefox có khả năng lưu trữ cấu trúc của biểu mẫu (hai hộp đầu vào, một được gắn cờ là bình thường, một được gắn cờ là mật khẩu) và điền vào thông tin đã lưu mà không liên quan đến ID của các yếu tố đầu vào.
Hãy thử điều này: thêm yếu tố đầu vào bổ sung vào biểu mẫu và xem điều gì sẽ xảy ra. Hoặc Firefox sẽ không điền bất cứ thứ gì, hoặc bạn sẽ tìm thấy tên của mình trong trường đầu tiên và trường mật khẩu được điền vào, trong khi phần tử nhập thứ hai trống.
Tôi đã thử một giải pháp đơn giản đang hoạt động cho đến thời điểm này. Tạo 2 trường ẩn và trình duyệt sẽ tự động điền các trường đó.
<input type="text" style="display: none">
<input type="password" style="display: none">
Hình như sử dụng một văn bản đầu vào bị khuyết tật từ đăng nhập và mật khẩu đầu vào không lừa tốt:
<input type="text" disabled="disabled" style="display:none">
Đó là chính xác. Nó cũng nên được đề cập rằng điều này chỉ hoạt động với các trường trong HTML gốc, không phải với các công cụ tạo ra JS. – user123444555621
Cảm ơn rất nhiều. Thật lạ khi Firefox lưu trữ Fieldname trong signon.sqlite. Không có thời gian và kiên nhẫn để tìm kiếm trong mã nguồn, nhưng tôi sẽ xem xét. –
Câu trả lời của bạn là lời cảm ơn rất hữu ích vì đã xem xét mã của FF và giải thích nó. Tôi đã thử những gì bạn đã giải thích và nó xác minh những gì bạn vạch ra. Hành vi này làm tôi bối rối vì tôi hy vọng xóa tự động hoàn tất các trường bằng cách thay đổi tên của chúng, vì tự động hoàn thành = tắt không ngăn tự động hoàn thành trên dữ liệu được lưu trữ trước khi bật tính năng tự động điền = tắt. – eloone