Google Chrome tự động điền biểu mẫu và nền màu vàng của nó


245

Tôi gặp sự cố thiết kế với Google Chrome và chức năng tự động điền biểu mẫu của nó. Nếu Chrome nhớ một số thông tin đăng nhập / mật khẩu, nó sẽ thay đổi màu nền thành màu vàng.

Dưới đây là một số ảnh chụp màn hình:

văn bản thay thế văn bản thay thế

Làm thế nào để loại bỏ nền đó hoặc chỉ vô hiệu hóa tự động điền này?


4
Tôi cũng muốn xem nếu có câu trả lời cho điều này.
Kyle

12
Đối với kiểu dáng, màu này có thể nghiêm túc với các yếu tố thiết kế, như phác thảo trong các thẻ đầu vào trong Chrome, tôi muốn thay đổi màu hơn là tắt nó đi.
Kyle

3
Google dường như thừa nhận vấn đề này ở một mức độ nào đó. Xem code.google.com/p/chromium/issues/detail?id=46543
MitMaro

1
Để tắt tự động hoàn tất, bạn có thể thêm tự động hoàn thành = "tắt" vào thành phần đầu vào của mình, ví dụ: <input type = "text" id = "input" autocomplete = "off">
joe_young 14/12/14

1
Chỉ là một thông tin bổ sung: Tôi đã bị cắn bởi điều này khi tôi có một trường mật khẩu. Tôi có các trường được tô sáng tự động (màu vàng) và chứa đầy giá trị lạ. Và tôi đã tìm thấy giải pháp ở đây: zigpress.com/2014/11/22/stop-chrome-messing-forms ... Giải pháp nằm trong phần có nội dung "Tắt Google Chrome Autofill" ... thêm các trường ẩn.
Cokorda Raka

Câu trả lời:


282

Thay đổi "màu trắng" thành bất kỳ màu nào bạn muốn.

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0 1000px white inset !important;
}

4
ý tưởng tuyệt vời. Tôi sẽ gắn bó với 50 hoặc 100 bất cứ khi nào đủ (hộp đầu vào kích thước thông thường) để tránh hiệu suất tiềm năng trên các thiết bị yếu hơn. (Và không cần px sau 0)
Frank Nocke

4
Yêu hack này! Suy nghĩ tuyệt vời ... Mọi người đều loại bỏ tự động điền. Tôi muốn giữ tự động chỉ khi đi xe màu vàng xấu xí.
Travis

1
Không hoạt động nếu bạn có hình nền phía sau trường nhập của bạn, chỉ lấp đầy toàn bộ khu vực bằng màu trắng. Tôi đã thử tất cả các giải pháp trên trang này, bao gồm các giải pháp dựa trên jquery và chúng không hoạt động với tôi, cuối cùng tôi đã phải thêm autocomplete = "off" vào trường.
Myke Black

19
Để cũng định kiểu sử dụng màu văn bản -webkit-text-fill-color- xem câu hỏi này
Erwin Wessels

2
có lỗi, tôi không thể thay đổi cú pháp nhưng hiện tại nó hoạt động:box-shadow: inset 0 0 0 1000px white !important;
Muhammad Umer

49

Nếu các bạn muốn các trường đầu vào minh bạch, bạn có thể sử dụng độ trễ chuyển tiếp và chuyển tiếp.

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
    -webkit-transition-delay: 9999s;
    -webkit-transition: color 9999s ease-out, background-color 9999s ease-out;
}

Giải pháp tốt nhất cho tôi vì giá trị màu RGBA không hoạt động -webkit-box-shadow. Cũng loại bỏ sự cần thiết phải đưa ra các giá trị màu cho khai báo này: các giá trị mặc định vẫn sẽ được áp dụng.
Sébastien

thậm chí tốt hơn là sử dụng độ trễ chuyển tiếp thay vì thời lượng của nó, để không bị trộn màu ở tất cả
antoine129

tốt nhưng vì một số lý do tôi đã phải chuyển quy tắc này vào cuối tập tin, nếu không thì không hiệu quả
Igor Mizak

Đó là những gì tôi tìm kiếm! Cảm ơn bạn!
Akhmedzianov Danilian

43

Giải pháp tại đây :

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
    $(window).load(function(){
        $('input:-webkit-autofill').each(function(){
            var text = $(this).val();
            var name = $(this).attr('name');
            $(this).after(this.outerHTML).remove();
            $('input[name=' + name + ']').val(text);
        });
    });
}

Điều này đã làm việc trong khi câu trả lời hàng đầu thì không. Tuy nhiên tôi nghĩ rằng tôi sẽ không cố gắng thay đổi hành vi kể từ khi a). đây là javascript nên có một giây giữa nó hoạt động và nó không hoạt động (cho đến khi js tải) và b). nó có thể gây nhầm lẫn cho người dùng chrome đã quen với hành vi mặc định.
TK123

3
Chrome của tôi chỉ chuyển màu vàng sang đầu vào mới :(
Dustin Silk

Xin đừng. Điều này sẽ không hoạt động với bất kỳ khung JS nào, chỉ dành cho các trang web tĩnh.
Akhmedzianov Danilian

26

Trong Firefox, bạn có thể vô hiệu hóa tất cả tự động hoàn thành trên một biểu mẫu bằng cách sử dụng thuộc tính autocomplete = "off / on". Tương tự, các mục riêng lẻ tự động hoàn thành có thể được đặt bằng cùng một thuộc tính.

<form autocomplete="off" method=".." action="..">  
<input type="text" name="textboxname" autocomplete="off">

Bạn có thể kiểm tra điều này trong Chrome vì nó sẽ hoạt động.


7
Biến autocomplete="off"không thể truy cập những ngày này.
João

4
Thật không may, giải pháp này không còn hoạt động trong Chrome.
henrywright

1
Điều này rất không được khuyến khích vì bạn không thực sự giải quyết vấn đề thực sự ở đây. thay vào đó, bạn đang tạo một cái mới bằng cách làm người dùng bực bội vì họ phải nhập thủ công các chi tiết đăng nhập (có lẽ là của họ) (nếu họ thậm chí còn nhớ chúng là gì)
xorinzor

25

Nếu bạn muốn duy trì tính năng tự động điền, cũng như mọi dữ liệu, trình xử lý đính kèm và chức năng được đính kèm với các yếu tố đầu vào của bạn, hãy thử tập lệnh này:

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0)
{
    var _interval = window.setInterval(function ()
    {
        var autofills = $('input:-webkit-autofill');
        if (autofills.length > 0)
        {
            window.clearInterval(_interval); // stop polling
            autofills.each(function()
            {
                var clone = $(this).clone(true, true);
                $(this).after(clone).remove();
            });
        }
    }, 20);
}

Nó thăm dò cho đến khi tìm thấy bất kỳ yếu tố tự động điền nào, sao chép chúng bao gồm dữ liệu và sự kiện, sau đó chèn chúng vào DOM ở cùng một vị trí và xóa bản gốc. Nó dừng bỏ phiếu một khi nó tìm thấy bất kỳ bản sao nào vì tự động điền đôi khi mất một giây sau khi tải trang. Đây là một biến thể của một mẫu mã trước đó, nhưng mạnh mẽ hơn và giữ càng nhiều chức năng càng tốt.

(Xác nhận làm việc trong Chrome, Firefox và IE 8.)


6
Đây là giải pháp duy nhất tôi thấy hoạt động, KHÔNG tắt tự động hoàn thành.
Xeroxoid

có thể thiết lập khoảng thời gian là không cần thiết như tự động điền chrome trên window.load?
Timo Huovinen

2
Hoạt động mà không loại bỏ tự động hoàn thành, giải pháp tốt hơn nhiều so với giải pháp có hàng triệu phiếu bầu.
minh

Các giải pháp khác không hiệu quả với tôi, ngay cả giải pháp được đánh giá cao nhất, nhưng giải pháp này đã làm được. Vấn đề trái ngược với những gì @Timo đã nói ở trên, đó là Chrome không tự động điền ngay tại window.load. Mặc dù điều này đã làm việc, một vấn đề với nó là nếu không có các phần tử -webkit-autofill, vòng lặp sẽ tiếp tục chạy. Bạn thậm chí không cần một khoảng thời gian để làm việc này. Đơn giản chỉ cần đặt thời gian chờ với độ trễ 50 mili giây và nó sẽ hoạt động tốt.
Gavin

16

CSS sau đây loại bỏ màu nền màu vàng và thay thế nó bằng màu nền bạn chọn. Nó không vô hiệu hóa tự động điền và nó không yêu cầu hack jQuery hoặc Javascript.

input:-webkit-autofill {
    -webkit-box-shadow:0 0 0 50px white inset; /* Change the color to your own background color */
    -webkit-text-fill-color: #333;
}
input:-webkit-autofill:focus {
    -webkit-box-shadow: /*your box-shadow*/,0 0 0 50px white inset;
    -webkit-text-fill-color: #333;
}

Giải pháp được sao chép từ: Ghi đè điền biểu mẫu và tô sáng đầu vào bằng HTML / CSS


Không chơi tốt nếu trường có nhiều bóng được áp dụng.
bại năng lực của tôi

6

Làm việc cho tôi, chỉ cần thay đổi css.

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px #ffffff inset!important;
}

bạn có thể đặt bất kỳ màu nào thay cho #ffffff .


3

Một chút hacky nhưng hoạt động hoàn hảo cho tôi

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px white inset;
}

3

Một sự kết hợp của các câu trả lời làm việc cho tôi

<style>
    input:-webkit-autofill,
    input:-webkit-autofill:hover,
    input:-webkit-autofill:focus,
    input:-webkit-autofill:active {
        -webkit-box-shadow: 0 0 0px 1000px #373e4a inset !important;
           -webkit-text-fill-color: white !important;
   }
</style>

Đây là ví dụ duy nhất phù hợp với tôi với cả văn bản và nền tảng trên Chrome Phiên bản 53.0.2785.116 m
pleshy

2

Đây là phiên bản MooTools của Jason's. Sửa nó trong Safari quá.

window.addEvent('domready',function() { 
    $('username').focus();

    if ((navigator.userAgent.toLowerCase().indexOf(\"chrome\") >= 0)||(navigator.userAgent.toLowerCase().indexOf(\"safari\") >= 0))
    {

        var _interval = window.setInterval(function ()
        {
            var autofills = $$('input:-webkit-autofill');
            if (autofills.length > 0)
            {

                window.clearInterval(_interval); // stop polling
                autofills.each(function(el)
                {
                    var clone = el.clone(true,true).inject(el,'after');;
                    el.dispose();
                });
            }
        }, 20);                                               


    }
});

1
Đừng sử dụng tập lệnh này. Nếu không có phần tử tự động điền, vòng lặp sẽ liên tục chạy ở tốc độ 20 mili giây. Một khoảng là không cần thiết. Đặt thời gian chờ sau window.load ở khoảng 50 mili giây và sẽ có nhiều thời gian để loại bỏ kiểu dáng.
Gavin

2

Điều này khắc phục sự cố trên cả Safari và Chrome

if(navigator.userAgent.toLowerCase().indexOf("chrome") >= 0 || navigator.userAgent.toLowerCase().indexOf("safari") >= 0){
window.setInterval(function(){
    $('input:-webkit-autofill').each(function(){
        var clone = $(this).clone(true, true);
        $(this).after(clone).remove();
    });
}, 20);
}

Là những gì làm việc cho tôi. Nhưng BUG vẫn ở đó, và như có thể thấy, không có ngày nào được sửa. code.google.com/p/chromium/issues/detail?id=46543#c22
Eduardo M

Bạn không bao giờ xóa khoảng thời gian của bạn. Đây là mã cẩu thả, không sử dụng nó.
Gavin

1
Trên thực tế điều này không hoạt động. Tôi không thể nhập bất cứ thứ gì vào đầu vào vì chúng liên tục được nhân bản. gần đến rồi ...
Dustin Silk

hãy thử var id = window.setInterval (function () {$ ('input: -webkit-autofill'). Each (function () {var clone = $ (this) .clone (true, true); $ (this) .after (clone) .remove ();});}, 20); $ ('input: -webkit-autofill'). Focus (function () {window.clearInterval (id);});
Dustin Silk

2

Điều này đã giúp tôi, một phiên bản CSS duy nhất.

input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset; }

trong đó màu trắng có thể là bất kỳ màu nào bạn muốn.


2

Tôi dùng cái này

input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset !important; }
input:focus:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset !important; }
/* You can use color:#color to change the color */

1

Trong thẻ của bạn, chỉ cần chèn dòng mã nhỏ này.

autocomplete="off"

Tuy nhiên, không đặt mục này trong trường tên người dùng / email / idname vì nếu bạn vẫn đang muốn sử dụng tự động hoàn tất, nó sẽ vô hiệu hóa nó cho trường này. Nhưng tôi đã tìm ra cách khắc phục điều này, chỉ cần đặt mã vào thẻ nhập mật khẩu của bạn bởi vì bạn không bao giờ tự động điền mật khẩu. Khắc phục sự cố này sẽ loại bỏ lực màu, khả năng tự động hoàn thành trên trường email / tên người dùng của bạn và cho phép bạn tránh các vụ hack cồng kềnh như Jquery hoặc javascript.


1

Nếu bạn muốn loại bỏ hoàn toàn, tôi đã điều chỉnh mã trong các câu trả lời trước để nó hoạt động khi di chuột, hoạt động và tập trung quá:

input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:active, input:-webkit-autofill:focus {
    -webkit-box-shadow: 0 0 0 1000px white inset;
}

1
thêm một !importantlà cần thiết nhưng cảm ơn, nó đã giúp tôi rất nhiều.
Polhol

0

Đây là một giải pháp Mootools hoạt động giống như của Alessandro - thay thế từng đầu vào bị ảnh hưởng bằng một đầu vào mới.

if (Browser.chrome) {
    $$('input:-webkit-autofill').each(function(item) {
        var text = item.value;
        var name = item.get('name');
        var newEl = new Element('input');
        newEl.set('name', name);
        newEl.value = text;
        newEl.replaces(item);
    });
}

0

Giải pháp đó là gì:

if ($.browser.webkit) {
    $(function() {
        var inputs = $('input:not(.auto-complete-on)');

        inputs.attr('autocomplete', 'off');

        setTimeout(function() {
            inputs.attr('autocomplete', 'on');
        }, 100);
    });
}

Nó tắt tự động hoàn thành và tự động điền (để nền màu vàng biến mất), đợi 100 mili giây sau đó quay lại chức năng tự động hoàn tất mà không cần tự động điền.

Nếu bạn có đầu vào cần phải tự động điền, hãy cung cấp cho họ auto-complete-onlớp css.


0

Không có giải pháp nào phù hợp với tôi, đầu vào tên người dùng và mật khẩu vẫn đang được phổ biến và được đặt nền màu vàng.

Vì vậy, tôi đã tự hỏi: "Làm thế nào để Chrome xác định những gì nên được tự động điền trên một trang nhất định?"

"Nó có tìm id đầu vào, tên đầu vào không? Id mẫu? Hành động biểu mẫu?"

Thông qua thử nghiệm của tôi với tên người dùng và mật khẩu đầu vào, chỉ có hai cách tôi thấy sẽ khiến Chrome không thể tìm thấy các trường nên được tự động điền:

1) Đặt mật khẩu đầu vào trước đầu vào văn bản. 2) Cung cấp cho họ cùng tên và id ... hoặc không có tên và id.

Sau khi tải trang, với javascript, bạn có thể thay đổi thứ tự của các đầu vào trên trang hoặc tự động cung cấp cho họ tên và id của họ ...

Và Chrome không biết điều gì đã xảy ra ... tự động hoàn tất tắt.

Hack điên, tôi biết. Nhưng nó làm việc cho tôi.

Chrome 34.0.1847.116, OSX 10.7.5


0

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('');
    }
});

0

Tôi đã sửa vấn đề này cho một trường mật khẩu tôi có như thế này:

Đặt loại đầu vào thành văn bản thay vì mật khẩu

Xóa giá trị văn bản đầu vào bằng jQuery

Chuyển đổi loại đầu vào thành mật khẩu với jQuery

<input type="text" class="remove-autofill">

$('.js-remove-autofill').val('');    
$('.js-remove-autofill').attr('type', 'password');

Không hoạt động trong Chrome. Ngay sau khi trường trở thành loại = mật khẩu, Chrome sẽ điền nó vào
mowgli

0

Một bản cập nhật cho giải pháp Arjans. Khi cố gắng thay đổi các giá trị, nó sẽ không cho phép bạn. Cái này làm việc tốt cho tôi. Khi bạn tập trung vào một đầu vào thì nó sẽ chuyển sang màu vàng. Nó đủ gần.

$(document).ready(function (){
    if(navigator.userAgent.toLowerCase().indexOf("chrome") >= 0 || navigator.userAgent.toLowerCase().indexOf("safari") >= 0){
        var id = window.setInterval(function(){
            $('input:-webkit-autofill').each(function(){
                var clone = $(this).clone(true, true);
                $(this).after(clone).remove();
            });
        }, 20);

        $('input:-webkit-autofill').focus(function(){window.clearInterval(id);});
    }
});

$('input:-webkit-autofill').focus(function(){window.clearInterval(id);});

0

Hãy thử mã này:

 	$(function(){
   		setTimeout(function(){
   			$('[name=user_password]').attr('type', 'password');
   		}, 1000);
   	});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<input name="user_password" type="password">


0

trả lời namrouti là chính xác. Nhưng nền vẫn có màu vàng khi đầu vào được chọn . Thêm !importantsửa chữa vấn đề. Nếu bạn cũng muốn textareaselectvới hành vi tương tự chỉ cần thêmtextarea:-webkit-autofill, select:-webkit-autofill

Chỉ nhập

input:-webkit-autofill {
    background-color: rgb(250, 255, 189) !important;
}

đầu vào, chọn, textarea

input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill {
    background-color: rgb(250, 255, 189) !important;
}

0

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.

Hy vọng điều này sẽ giúp bạn tiết kiệm thời gian.


0

Nếu bạn muốn tránh nhấp nháy màu vàng cho đến khi css của bạn được áp dụng, hãy chuyển sang một cậu bé xấu tính như vậy:

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0 1000px white inset !important;
    transition: background-color 10s ease-in-out 0s;
}

-1

Giải pháp cuối cùng:

$(document).ready(function(){
    var contadorInterval = 0;
    if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0)
    {
        var _interval = window.setInterval(function ()
        {
            var autofills = $('input:-webkit-autofill');
            if (autofills.length > 0)
            {
                window.clearInterval(_interval); // stop polling
                autofills.each(function()
                {
                    var clone = $(this).clone(true, true);
                    $(this).after(clone).remove();
                    setTimeout(function(){
//                        $("#User").val('');
                        $("#Password").val('');
                    },10);
                });
            }
            contadorInterval++;
            if(contadorInterval > 50) window.clearInterval(_interval); // stop polling
        }, 20);
    }else{
        setTimeout(function(){
//            $("#User").val('');
            $("#Password").val('');
        },100);
    }
});


-5

Chỉ thấy mình với cùng một câu hỏi. Điều này làm việc cho tôi:

form :focus {
  outline: none;
}

3
đó là phác thảo trên hộp khi bạn nhấp vào nó, không phải màu nền của đầu vào tự động điền
Claire
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.