reCAPTCHA를 사용하는 양식이 있습니다. 어떤 이유로 사용자가 잘못된 포착 값으로이 양식을 제출하면 페이지가 다시 렌더링 될 때 포착이 렌더링되지 않습니다.Recaptcha - 스크립트 태그 주입이 산발적으로 실패합니다.
재현이 "스크립트"태그를 주입하려고 시도하고 산발적으로 (일부 브라우저, 특정 환경 및 특정 시나리오에서만), "스크립트"태그를 추가하지 못하고 있습니다. DOM에.
그것은 다음과 같이 발생합니다
1)이 보이는 형태로 내장 된 자바 스크립트 일부 인라인 있습니다 :
https://www.google.com/recaptcha/api/challenge?k=<our public key>
2) 그 스크립트는 다음 올바르게 실행하고 반환
은var RecaptchaState = {
site : <some value>,
challenge : <challenge key>,
is_incorrect : false,
programming_error : '',
error_message : '',
server : 'https://www.google.com/recaptcha/api/',
timeout : 18000
};
document.write('<scr'+'ipt type="text/javascript" s'+'rc="' + RecaptchaState.server + 'js/recaptcha.js"></scr'+'ipt>');
3) 일반적으로 스크립트 태그가 페이지에 삽입되고 recaptcha.js가로드되고 RecaptchaState가 호출되어 호출이 이루어집니다. recaptcha를 사용하여 이미지를 렌더링하십시오.
그러나 몇 가지 이유로 인해 2)에서 추가해야하는 스크립트 태그가 DOM에 추가 된 것으로 보이지 않으므로 recaptcha.js가로드되지 않으므로 recaptcha는 렌더링되지 않습니다! 페이지가 렌더링 된 후에 "RecaptchaState"가 존재하고 올바른 값을 가지면 콘솔에서 볼 수 있습니다. 스크립트 태그가 없어도됩니다.
그게 무슨 일이 일어나고 있는지, 그리고 나는 왜 그토록 당황 스럽습니다. 파이어 폭스에서만 이것을 재현 할 수 있으며 이상하게도 특정 조건 하에서 만 발생한다. 예를 들어 피들러를 통해 요청을 라우팅하는 경우 매번 작동하고 실패하지 않습니다. 요청을 제출하기 전에 캐시를 지우면 매번 작동합니다. 때로는 실패 할 것으로 예상 할 때 작동하고 반대의 경우도 마찬가지입니다. 그래서 아주 산발적입니다.
그래서 내 생각에는 아마도 "document.write"문을 방해하는 js로드 시점과 관련이 있다는 것입니다. 어쩌면 다른 자바 스크립트가 그걸 간섭하고있는 것처럼 보일 수도 있습니다. 내가 이것을 알아 내려고 시도 할 수있는 방법, 실행할 수있는 테스트, 찾을 수있는 것, 또는 실제로 모든 아이디어를 찾는 일반적인 아이디어를 찾고 있습니다.
아직 운이를 파악하지 미리
업데이트에
감사합니다. 한 가지 생각은 ... 방화범이 끌리는 콘솔에 아무런 오류 메시지가 나타나지 않는다는 것을 알았습니다. Firefox에서 진행되는 작업을 자세히 살펴볼 수있는 유틸리티가 있습니까? Chrome에 대한 'Speed-Tracer'와 같은 것을 생각 중이며 매우 자세한 일정을 알려줍니다. 여기서 유일한 문제는 Chrome에서 을 재현 할 수 없다는 것입니다.
'document.write'를'document.createElement' 및 관련 함수로 바꾸려고 했습니까? – Lekensteyn
아니, 그 코드는 우리에게 recaptcha에서 보내 지므로, 실제로 코드를 제어 할 수는 없습니다. – JasonStoltz