여러 양식에서 크롬 자동 완성 동작에 문제가 있습니다.
양식의 필드는 모두 “이메일”, “이름”또는 “암호”와 같이 매우 일반적이고 정확한 이름을 가지며 autocomplete="off"
설정되었습니다.
자동 완성 플래그는 자동 완성 동작을 성공적으로 비활성화했습니다. 여기서 입력을 시작할 때 값 드롭 다운이 표시되지만 Chrome에서 필드를 자동으로 채우는 값은 변경되지 않았습니다.
크롬이 입력을 잘못 채우는 것 (예 : 전화 입력을 이메일 주소로 채우는 것)을 제외하고는이 동작이 정상입니다. 고객이 이에 대해 불평했기 때문에 여러 경우에서 발생하는 것으로 확인되었으며 내 컴퓨터에서 로컬로 수행 한 작업의 결과가 아닙니다.
내가 생각할 수있는 유일한 해결책은 사용자 정의 입력 이름을 동적으로 생성 한 다음 백엔드에서 값을 추출하는 것입니다. 그러나 이것은이 문제를 해결하는 꽤 해킹 된 것처럼 보입니다. 이 문제를 해결하는 데 사용할 수있는 자동 완성 동작을 변경하는 태그 나 특징이 있습니까?
답변
새 Chrome 버전 autocomplete="new-password"
의 경우 비밀번호 입력란에 입력하면됩니다. 나는 그것을 확인하고 잘 작동합니다.
이 토론에서 Chrome 개발자의 팁을 얻었습니다 :
https://bugs.chromium.org/p/chromium/issues/detail?id=370363#c7
PS Chrome은 이름, ID 및 레이블 및 임의의 텍스트 노드를 포함하여 필드 주변에서 얻을 수있는 모든 텍스트 콘텐츠에서 자동 완성 동작을 유추하려고 시도합니다. street-address
문맥 과 같이 자동 완성 토큰이 있으면 Chrome에서 자동 완성합니다. 휴리스틱은 양식에 추가 필드가있는 경우에만 트리거되거나 양식에 필드가 너무 적은 경우에만 트리거되므로 상당히 혼란 스러울 수 있습니다. 또한 autocomplete="no"
작동하는 것처럼 보이지만 autocomplete="off"
역사적 이유로는 그렇지 않습니다. autocomplete="no"
브라우저에이 필드는이라는 필드로 자동 완성되어야한다고 알려주는 것 "no"
입니다. 고유 한 임의 autocomplete
이름 을 생성 하면 자동 완성 기능이 비활성화됩니다.
사용자가 잘못된 양식을 방문한 경우 자동 완성 정보가 손상 되었을 수 있습니다 . Chrome에 수동으로 들어가서 자동 완성 정보를 수정하도록하는 것이 필요한 조치 일 수 있습니다.
답변
난 그냥 당신이 사이트에 대한 기억 사용자 이름과 암호가있는 경우, 크롬의 현재 버전에 사용자 이름 / 이메일 주소를 자동 완성 할 것으로 나타났습니다 전에 필드 모든 type=password
필드. 필드가 무엇인지 상관하지 않습니다. 비밀번호가 사용자 이름이되기 전에 필드를 가정합니다.
오래된 솔루션
그냥 사용 <form autocomplete="off">
하면 암호 사전 채우기뿐만 아니라 브라우저가 만들 수있는 가정 (종종 잘못된 경우)을 기반으로하는 모든 종류의 휴리스틱 채우기가 방지됩니다. <input autocomplete="off">
암호 자동 완성 기능은 Chrome 을 사용 하는 것과는 반대로 (Firefox는 암호를 준수합니다).
업데이트 된 솔루션
Chrome은 이제 무시합니다 <form autocomplete="off">
. 따라서 원래 삭제 된 해결책은 이제 모든 분노입니다.
간단히 두 개의 필드를 만들고 “display : none”으로 숨기십시오. 예:
<!-- 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"/>
그런 다음 실제 필드를 아래에 두십시오.
의견을 추가하거나 팀의 다른 사람들이 귀하의 활동을 궁금해 할 것입니다!
2016 년 3 월 업데이트
최신 Chrome으로 테스트했습니다. 모두 좋습니다. 이것은 꽤 오래된 답변이지만 지금은 우리 팀이 수십 개의 프로젝트에서 수년 동안 그것을 사용하고 있다고 언급하고 싶습니다. 아래의 몇 가지 의견에도 불구하고 여전히 훌륭하게 작동합니다. 필드는 display:none
포커스를 얻지 못한다 는 의미 이므로 액세스 가능성에는 문제가 없습니다 . 앞에서 언급했듯이 실제 필드 앞에 배치해야 합니다.
자바 스크립트를 사용하여 양식을 수정하는 경우 추가 트릭이 필요합니다. 양식을 조작하는 동안 가짜 필드를 표시 한 다음 1 밀리 초 후에 다시 숨 깁니다.
jQuery를 사용하는 예제 코드 (가짜 필드에 클래스를 제공한다고 가정) :
$(".fake-autofill-fields").show();
// some DOM manipulation/ajax here
window.setTimeout(function () {
$(".fake-autofill-fields").hide();
},1);
2018 년 7 월 업데이트
Chrome의 사용 중지 방지 전문가가 열심히 일한 이후 솔루션이 더 이상 제대로 작동하지 않습니다. 그러나 그들은 다음과 같은 형태로 우리에게 뼈를 던졌습니다.
<input type="password" name="whatever" autocomplete="new-password" />
이것은 작동하며 대부분 문제를 해결합니다.
그러나 비밀번호 필드가없고 이메일 주소 만있는 경우 작동하지 않습니다. 또한 노란색으로 떨어지거나 사전 채우기를 중단하기가 어려울 수 있습니다. 가짜 필드 솔루션을 사용하여이 문제를 해결할 수 있습니다.
실제로 때로는 가짜 필드 두 개를 떨어 뜨려 다른 장소에서 시도해야합니다. 예를 들어 양식 시작 부분에 이미 가짜 필드가 있었지만 Chrome은 최근에 ‘이메일’필드를 다시 미리 채우기 시작했습니다. 따라서 ‘이메일’필드 바로 앞에 두 배가되어 더 많은 가짜 필드를 넣었습니다. . 첫 번째 또는 두 번째 로트 필드를 제거하면 잘못된 과도 자동 완성으로 돌아갑니다.
2020 년 3 월 업데이트
이 솔루션이 여전히 언제 작동하는지는 확실하지 않습니다. 때로는 여전히 작동하지만 항상 그렇지는 않습니다.
아래 주석에는 몇 가지 힌트가 있습니다. @anilyeni가 방금 추가 한 것 중 하나는 더 조사 할 가치가 있습니다.
내가 알다시피에 autocomplete="off"
요소가 3 개 미만인 경우 Chrome 80 에서 작동합니다 <form>
. 논리가 무엇인지 또는 관련 문서가 어디에 있는지 모르겠습니다.
또한 @dubrox의 이것도 테스트하지는 않았지만 관련이있을 수 있습니다.
트릭에 대해 많은 감사하지만 display:none;
더 이상 작동하지 않지만 대답은 업데이트하십시오. position: fixed;top:-100px;left:-100px; width:5px;
🙂
2020 년 4 월 업데이트
이 속성에 대한 크롬의 특별한 가치는 일을하고 있습니다 : (입력에서 테스트되었지만 나에 의해 테스트되지는 않았습니다)
autocomplete="chrome-off"
답변
몇 달과 몇 달의 노력 끝에 솔루션이 생각보다 훨씬 단순하다는 것을 알았습니다.
대신 autocomplete="off"
사용 autocomplete="false"
)
그렇게 간단하며 Chrome에서도 매력처럼 작동합니다!
2019 년 8 월 업데이트 (댓글에서 @JonEdiger 로의 신용)
참고 : 많은 온라인 정보에 따르면 브라우저는 이제 autocomplete = ‘false’를 autocomplete = ‘off’와 동일하게 취급합니다. 적어도 지금이 순간, 그것은 세 브라우저에서 자동 완성을 막고 있습니다.
양식 수준에서 설정 한 다음 원하는 입력에 대해 ‘없음’과 같은 유효하지 않은 값으로 설정하십시오.
<form autocomplete="off">
<input type="text" id="lastName" autocomplete="none"/>
<input type="text" id="firstName" autocomplete="none"/>
</form>
답변
때로는 autocomplete=off
자격 증명을 잘못된 필드에 채우는 것을 막지 못할 수도 있습니다.
해결 방법은 읽기 전용 모드를 사용하여 브라우저 자동 완성을 비활성화하고 쓰기 가능 초점을 설정하는 것입니다.
<input type="password" readonly onfocus="this.removeAttribute('readonly');"/>
focus
이벤트는 마우스 클릭에서 발생하고 필드를 통해 탭 이동.
최신 정보:
Mobile Safari는 필드에 커서를 설정하지만 가상 키보드는 표시하지 않습니다. 이 새로운 해결 방법은 이전과 동일하지만 가상 키보드를 처리합니다.
<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(); }" />
라이브 데모 https://jsfiddle.net/danielsuess/n0scguv6/
// UpdateEnd
설명 : 브라우저가 자격 증명을 잘못된 텍스트 필드에 자동으로 채 웁니다?
전화 입력을 이메일 주소로 채우는 등 입력을 잘못 입력
동일한 양식의 비밀번호 입력란이있을 때 Chrome 및 Safari에서이 이상한 동작이 나타나는 경우가 있습니다 . 브라우저가 저장된 자격 증명을 삽입하기 위해 암호 필드를 찾습니다. 그런 다음 사용자 이름 을 가장 가까운 textlike-input 필드에 자동 입력합니다.이 필드 는 DOM 의 암호 필드 앞에 나타납니다 (관찰로 인해 추측). 브라우저가 마지막 인스턴스이므로 제어 할 수 없으므로
위의 읽기 전용 수정은 저에게 효과적이었습니다.
답변
검색 창 기능을 구현하는 경우 type
속성을 search
다음과 같이 설정하십시오 .
<input type="search" autocomplete="off" />
이것은 Chrome v48에서 작동하며 합법적 인 마크 업 인 것으로 보입니다.
답변
이 시도. 나는 질문이 다소 오래되었다는 것을 알고 있지만 이것은 문제에 대한 다른 접근법입니다.
또한 문제가 password
현장 바로 위에 있다는 것을 알았습니다 .
나는 두 가지 방법을 모두 시도했다.
<form autocomplete="off">
그리고 <input autocomplete="off">
하지만 그들 중 누구도 나를 위해 일하지 않는다.
그래서 아래 스 니펫을 사용하여 수정했습니다. 비밀번호 유형 필드 바로 위에 다른 텍스트 필드를 추가하여 만들었습니다 display:none
.
이 같은:
<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="" />
누군가에게 도움이되기를 바랍니다.
답변
왜 그런지 모르겠지만 이것은 도움이되었고 나를 위해 일했습니다.
<input type="password" name="pwd" autocomplete="new-password">
이유를 모르겠지만 autocompelete = “new-password”는 자동 완성을 비활성화합니다. 최신 49.0.2623.112 크롬 버전 에서 작동했습니다 .