이 있 W3C 유효한 방법을 사용하지 않는 자동 완성에서는 HTML 형성하는가?

StackOverflow https://stackoverflow.com/questions/582244

  •  06-09-2019
  •  | 
  •  

문제

사용하는 경우 xhtml1-transitional.dtd doctype 를 수집,신용 카드 번호를 다음과 같은 HTML

<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>

플래그에 경고 W3C 검사기:

이 없 특성을"완성".

이 있 W3C/표준 방법을 사용하지 않는 브라우저는 자동 완성에 민감한 분야에서는 형태가 있습니까?

도움이 되었습니까?

해결책

는 좋은 기사에서 MDC 설명하는 문제(및 솔루션)을 형태로 자동 완성.Microsoft 는 출판과 비슷한 , 뿐만 아니라.

솔직히 말해서,이것이 뭔가 중요하신 사용자,'깨고의 기준에 이 방법은 보이 적절하다.예를 들어,아마존 사용하여성 특성을 매우 비트,그리고 그것은 작동하는 것 같습니다.

하려는 경우 경고를 제거하는 완전히 사용할 수 있습니다,자바 스크립트를 적용한 특성을 지원하는 브라우저(IE,Firefox 는 중요한 브라우저를 사용하여) someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );

마지막으로는 경우,귀하의 사이트는 HTTPS 를 사용하여,즉 자동으로 꺼집 자동완성 기능(으로 몇 가지 다른 브라우저를,멀리로 나가 알고).

업데이트

으로 이 대답은 여전히 매우 약간 늦게 집에 가서 만들고 싶어점에서 HTML5 를 사용할 수 있습니성 특성 양식에서 요소입니다.보 문서 에 W3C 습니다.

다른 팁

W3C가 (x) html4와 함께 작동하는 방법을 제안했다면 매우 놀랄 것입니다. 자동 완성 기능은 전적으로 브라우저 기반이며 지난 몇 년 동안 소개되었습니다 (HTML4 표준이 작성된 후).

그러나 HTML5가 하나를 가질 경우 놀라지 않을 것입니다.

편집하다: 생각했던 데로, html5 하다 그것을 가지고 있습니다 특징. 페이지를 HTML5로 정의하려면 다음과 유형을 사용하십시오 (즉 : 소스 코드의 첫 번째 텍스트로 이것을 넣으십시오). 모든 브라우저가 여전히 드래프트 형식 이므로이 표준을 지원하는 것은 아닙니다.

<!DOCTYPE html>

HTML 4: 아니

HTML 5: 예

자동 완성 속성은 열거 된 속성입니다. 속성에는 두 개의 상태가 있습니다. 그만큼 ~에 키워드 맵 on State 및 the 끄다키워드는 꺼짐 상태에 맵핑됩니다. 속성도 생략 할 수 있습니다. 결 측값 기본값은입니다 ~에 상태. 그만큼 끄다 상태는 기본적으로 양식의 양식 컨트롤에 자동 필드 이름이 설정되어 있음을 나타냅니다. 끄다; on 상태는 기본적으로 양식의 양식 제어가 autofill "on"으로 설정된 필드 이름.

참조: W3

아니요,하지만 브라우저 자동 완성은 종종 현장에서 동일하게 트리거됩니다. name 이전에 채워진 필드로 속성. 당신이 무작위 필드 이름, AutoComplete는 이전에 입력 한 필드 값을 가져올 수 없습니다.

입력 필드에 "email_<?= randomNumber() ?>"그런 다음 게시물을 통해이 데이터 루프를 수신하거나 패턴과 일치하는 무언가를 찾는 변수를 얻는 스크립트가 있습니다."email_[some number]", 당신은 이것을 철수 할 수 있으며, 이것은 (실질적으로) 성공을 보장했을 것입니다. 브라우저에 관계없이.

아니요, 좋은 기사가 있습니다 모질라 위키.

나는 계속해서 유효하지 않은 것을 사용할 것입니다 attribute. 나는 이것이 실용주의가 검증을 통해 승리 해야하는 곳이라고 생각합니다.

JavaScript로 설정하는 것은 어떻습니까?

var e = document.getElementById('cardNumber');
e.autocomplete = 'off'; // Maybe should be false

완벽하지는 않지만 HTML이 유효합니다.

4 가지 유형의 입력을 모두 잡는 것이 좋습니다.

$('form,input,select,textarea').attr("autocomplete", "off");

참조:

jQuery를 사용하는 경우 다음과 같은 작업을 수행 할 수 있습니다.

$(document).ready(function(){$("input.autocompleteOff").attr("autocomplete","off");});

원하는 곳에 AutoCompleteOff 클래스를 사용하십시오.

<input type="text" name="fieldName" id="fieldId" class="firstCSSClass otherCSSClass autocompleteOff" />

모든 입력을 원한다면 autocomplete=off, 당신은 단순히 그것을 사용할 수 있습니다 :

$(document).ready(function(){$("input").attr("autocomplete","off");});

또 다른 방법 - 보안에 도움이되는 또 다른 방법은 입력 상자를 표시 할 때마다 다른 입력 상자를 호출하는 것입니다. 이렇게하면 세션은 일회성 만 입력을 읽을 수 있으며 자동 완성은 계속할 것이 없습니다.

브라우저 경험을 방해 해야하는지에 대한 Rmeador의 질문에 관한 요점 : 우리는 연락처 관리 및 CRM 시스템을 개발하고 다른 사람들의 데이터를 형태로 입력 할 때 자신의 세부 사항을 지속적으로 제안하는 것을 원하지 않습니다.

이것은 우리의 요구에 효과적이지만, 우리는 사용자에게 괜찮은 브라우저를 얻도록 지시하는 사치를 가지고 있습니다 :)

autocomplete='off' 

autocomplete="off" 이것은 모든 최신 브라우저의 문제를 해결해야합니다.

<form name="form1" id="form1" method="post" autocomplete="off"
   action="http://www.example.com/form.cgi">
  [...]
</form>

현재 버전의 Gecko 브라우저에서 자동 완성 속성은 완벽하게 작동합니다. 이전 버전의 경우 Netscape 6.2로 돌아가서 "주소"및 "이름"이있는 양식에 대한 예외와 함께 작동했습니다.

업데이트

경우에 따라 브라우저는 자동 완성 속성이 OFF로 설정되어 있어도 자동 완성 값을 계속 제안합니다. 이 예상치 못한 행동은 개발자에게는 매우 당혹 스러울 수 있습니다. 실제로 무자비한 완성을 강요하는 요령은 이루어집니다 속성에 임의 문자열을 할당하십시오, 예를 들어:

autocomplete="nope"

이 임의의 값은 아니기 때문에 valid one, 브라우저가 포기합니다.

문서화

임의의 '이름'속성을 사용하면 나에게 효과가 있습니다.

양식을 보낼 때 이름 속성을 재설정하므로 양식이 전송 될 때 여전히 이름으로 액세스 할 수 있습니다. (이름을 저장하기 위해 ID 속성 사용)

참고 있는 일부에 대한 혼란의 위치를 자동 완성합니다.에 적용될 수 있습을 전체 양식 꼬리표 또는 개별 태그 입력,그리고 이것이 정말로 표준화하기 전에 HTML5(는 명시적으로 허용 모두 위치).이전 문서 특히 이 Mozilla 문서 만을 언급 FORM tag.동시에 어떤 보안 스캐너 보는 것 만으로도 자동 완성에 태그 입력하고 불평을 누락하는 경우(경우에도 부모 형식).에 대한 자세한 분석 이 엉망은 여기에 게시되어 있습니다: 혼란을 자동 완성=OFF 특성에 HTML 양식.

이상적이지는 않지만 렌더링 할 때마다 텍스트 상자의 ID와 이름을 변경할 수 있습니다. 데이터를 얻을 수 있도록 서버 측면도 추적해야합니다.

이것이 효과가 있는지 확실하지 않은 것은 단지 생각 일뿐입니다.

더 간단한 방법이 있다고 생각합니다. 임의 이름 (JavaScript를 통해)으로 숨겨진 입력을 만들고 사용자 이름을 설정하십시오. 비밀번호로 반복하십시오. 이런 식으로 백엔드 스크립트는 적절한 필드 이름이 무엇인지 정확히 알고 있으며 자동 완성을 어둠 속에 유지합니다.

아마 틀렸을 지 모르지만 그것은 단지 아이디어 일뿐입니다.

if (document.getElementsByTagName) {
    var inputElements = document.getElementsByTagName("input");
    for (i=0; inputElements[i]; i++) {
        if (inputElements[i].className && (inputElements[i].className.indexOf("disableAutoComplete") != -1)) {
            inputElements[i].setAttribute("autocomplete","off");
        }
    }
}

이 솔루션은 나와 함께 작동합니다.

$('form,input,select,textarea').attr("autocomplete", "nope");

이 지역에서 자동으로 사용하려는 경우 : 추가하십시오. autocomplete="false" 요소 EX :

<input id="search" name="search" type="text" placeholder="Name or Code" autcomplete="false">

유효한 자동 완성

<script type="text/javascript">
    /* <![CDATA[ */
    document.write('<input type="text" id="cardNumber" name="cardNumber" autocom'+'plete="off"/>');
    /* ]]> */ 
</script>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top