CSS를 통한 자동 완성 비활성화


94

CSS를 사용하여 양식 요소 (특히 텍스트 필드)에서 자동 완성을 비활성화 할 수 있습니까?

자동 완성 요소를 허용하지 않는 태그 라이브러리를 사용하고 있으며 Javascript를 사용하지 않고 자동 완성 기능을 비활성화하고 싶습니다.

답변:


52

생성 된 id및 name매번 다른 것을 사용할 수 있으므로 브라우저는이 텍스트 필드를 기억할 수 없으며 일부 값을 제안하지 못합니다.

이것은 적어도 크로스 브라우저 안전한 대안이지만 RobertsonM ( autocomplete="off") 의 답변을 사용하는 것이 좋습니다 .


4
이것의 부작용은 브라우저 히스토리가 다양한 (무작위) 양식 필드로 어수선 해집니다. 브라우저 로컬 데이터 베이에서 알려진 값을 찾을 때마다 시간이 걸립니다.
— dermatthias

4
좋은 생각이지만 신용 카드 번호가 암호화되지 않은 자동 완성 데이터베이스에 저장되는 것을 막지는 않습니다.
— Hans-Peter Störr

정적 컨트롤 이름 / ID를 사용하지 않으면 스크립팅이 중단되고 모든 양식 데이터 수집도 중단됩니다 (응용 프로그램의 모든 측면이 새로운 명명 규칙을 인식하고 스크립팅 / 데이터 수집도 동적으로 업데이트하지 않는 한) ).
— Gary Richter 2015

자동 완성을 피해야합니다. 필드 이름을 "무작위 화"하는 것이 유일한 방법입니다. 같은 힌트를 사용하는 autocomplete="off"것은 브라우저 X 버전 (현재 + 1)에서 무시됩니다. (예를 들어, 최신 Google 크롬은 자동 완성 = 오프 무시합니다.)
— 미코 Rantalainen

@kmoser : 요소를 무작위 화하여 브라우저의 자동 완성 기능을 무력화하더라도 id여전히 캐시에 저장됩니다 (예 : 사용자의 하드 드라이브). 이것은 누군가의 신용 카드 번호 나 기타 민감한 정보에 대해 끔찍한 일입니다. 또한 사용자의 디스크 드라이브를 불필요하게 복잡하게 만듭니다. 그들이 귀하의 페이지를 방문 할 때마다 새로운 (쿠키와 유사한) 파일이 컴퓨터에 저장됩니다. 도대체 Chrome 캐시를 지우고 여유 공간을 확인하십시오 (한동안하지 않은 경우). 그것이 제가 그것을 끔찍한 생각이라고 부르는 이유입니다.
— c00000fd

129

현재 CSS에는 'autocomplete off'속성이 없습니다. 그러나 html에는이를위한 쉬운 코드가 있습니다.

<input type="text" id="foo" value="bar" autocomplete="off" />

사이트 전체 이펙터를 찾고 있다면 모든 'input'을 실행하고이 태그를 추가하는 js 함수를 갖거나 해당 CSS 클래스 / ID를 찾는 것이 쉬운 방법입니다.

autocomplete 속성은 Chrome 및 Firefox (!)에서 잘 작동하지만 HTML 양식에서 자동 완성을 비활성화하는 W3C 유효한 방법이 있습니까?를 참조하십시오.


4
developer.mozilla.org/en-US/docs/Web/Security/…autocomplete="anyrandominvalidvalue" 작동 할 것을 제안 합니다.
— Andrew Stalker

49

jQuery로 쉽게 구현할 수 있습니다.

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

4
대부분의 경우 $ ( 'form'). attr ( 'autocomplete', 'off'); 훨씬 더 효율적입니다 (아래 답변에 대한 주석 참조)
— irakli

@irakli 제 경우에는 사용 form이 유일 하게 작동했습니다. 아닙니다 input. 감사.
— khaverim

1
안녕하세요, 2018 년입니다. 이것이 요즘 제가이 작업을 수행 할 수있는 유일한 방법입니다. 또한 @irakli 전체 양식에서 양식을 선택기로 사용해야하는 경우에도 마찬가지입니다.
— Devon Kiss

15

를 사용하는 경우 form모든 자동 완성을 비활성화 할 수 있습니다.

<form id="Form1" runat="server" autocomplete="off">

실제로 Mozilla에 따르면 : "자동 완성 속성이 입력 요소에 지정되지 않은 경우 브라우저는 <input> 요소의 양식 소유자의 자동 완성 속성 값을 사용합니다. 양식 소유자는이 <input> 요소가있는 양식 요소입니다. 입력 요소의 양식 속성에 의해 ID가 지정된 양식 요소의 자손 또는 양식 요소. 자세한 내용은 <form>의 autocomplete 속성을 참조하십시오. " 이것이 위에 표시된 것보다 훨씬 더 효율적인 jQuery 대안을 고려하면 다음과 같습니다. $ ( 'form'). attr ( 'autocomplete', 'off');
— irakli 2014

13

CSS에는이 기능이 없습니다. 클라이언트 측 스크립팅을 사용해야합니다.


1
가장자리에서 이것을 비활성화하는 방법을 아십니까? 우리가 무엇을하든 우리는 그것을 봅니다.
— 벤자민 Gruenbaum

@BenjaminGruenbaum Using autocomplete="false"은 Edge에서 작동합니다. 기술적으로 잘못된 값은 여기에서 "false"대신 사용할 수 있습니다.
— Andrew

4

이 질문 답변 및 웹의 다른 기사에서 제안 된 모든 방법을 시도했지만 어쨌든 작동하지 않았습니다. 다음과 같이 클라이언트 측 스크립트를 사용하지만 $ (document) .ready () 외부에서 언급 한 사용자 중 하나를 사용하여 양식 요소에서 autocomplete = "new-random-value", autocomplete = "off"를 시도했습니다.

$(':input').on('focus', function () {
  $(this).attr('autocomplete', 'off')
});

브라우저에서 다른 우선 순위가이 이상한 동작을 일으키는 원인이 될 수 있습니다! 그래서 더 많이 검색했고 마지막 으로이 좋은 기사의 줄 아래를주의 깊게 다시 읽었습니다 .

이러한 이유로 많은 최신 브라우저는 로그인 필드에 대해 autocomplete = "off"를 지원하지 않습니다.

사이트에서에 대해 autocomplete = "off"를 설정하고 양식에 사용자 이름 및 비밀번호 입력 필드가 포함 된 경우 브라우저는 계속이 로그인을 기억하도록 제안하고 사용자가 동의하면 브라우저는 다음에 사용자가 해당 필드를 자동으로 채 웁니다. 페이지를 방문합니다. 사이트에서 사용자 이름 및 비밀번호 필드에 autocomplete = "off"를 설정하면 브라우저는이 로그인을 기억하도록 제안하고 사용자가 동의하면 다음에 사용자가 페이지를 방문 할 때 해당 필드를 자동으로 채 웁니다. 이것은 Firefox (버전 38 이후), Google Chrome (34 이후) 및 Internet Explorer (버전 11 이후)의 동작입니다.

사용자가 다른 사람에 대해 새 암호를 지정할 수있는 사용자 관리 페이지를 정의하고 있으므로 암호 필드 자동 채우기를 방지하려면 autocomplete = "new-password"를 사용할 수 있습니다 . 그러나이 값에 대한 지원은 Firefox에서 구현되지 않았습니다.

그냥 효과가 있습니다. 나는 특별히 크롬을 시도했고 이것이 계속 작동하고 다른 사람들을 돕길 바랍니다.


1

모든 입력에 가짜 자동 완성 이름을 추가하여 문제를 해결했습니다.

$("input").attr("autocomplete", "fake-name-disable-autofill");

0

@ahhmarr의 솔루션 덕분에 Angular + ui-router 에서 동일한 문제를 해결할 수있었습니다. 환경 . 여기에서 관심있는 사람을 위해 공유하겠습니다.

내 index.html에서 다음 스크립트를 추가했습니다.

<script type="text/javascript">
    setTimeout(function() {
        $('input').attr('autocomplete', 'off');
    }, 2000);
</script>

그런 다음 상태 변경을 다루기 위해 루트 컨트롤러에 다음을 추가했습니다.

$rootScope.$on('$stateChangeStart', function() {
                $timeout(function () {
                    $('input').attr('autocomplete', 'off');
                }, 2000);
            });

시간 초과는 jquery를 적용하기 전에 html이 렌더링하는 것입니다.

더 나은 솔루션을 찾으면 알려주십시오.


0

CSS를 사용하여 자동 완성을 비활성화 할 수 없지만 HTML을 사용할 수 있습니다.

<input type="text" autocomplete="false" />

기술적으로 false잘못된 값으로 바꿀 수 있으며 작동합니다. 이 iOS는 Edge에서도 작동하는 유일한 솔루션입니다.


0

3 가지 방법이 있는데, 더 나은 방법으로 언급합니다.

1-HTML 방식 :

<input type="text" autocomplete="false" />

2-Javascript 방식 :

document.getElementById("input-id").getAttribute("autocomplete") = "off";

3-jQuery 방식 :

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

0

'new-password'대신 사용 합니다'off' 자동 완성에 .

그리고 나는 또한이 코드를 사용해 보았고 (적어도 내 끝에서) 작동합니다. 정보를 위해 WP와 GravityForm을 사용합니다.

$('input').attr('autocomplete','new-password');

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

3
이것은 질문에 대한 답변을 제공하지 않습니다. OP는 구체적으로 CSS 솔루션을 요청했으며 이미 기존 솔루션과 똑같은 답변입니다.
— Holger Just
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.