実際の例:
ソースページを表示するとすべて正常に動作しますが、AJAX リクエストを介して読み込むと、reCAPTCHA があるべき場所に表示されます...
<noscript>
<iframe src="http://www.google.com/recaptcha/api/noscript?k=6LfwkccSAAAAALr_z6vDBqkySowo5KIiR0mVM1BX" height="300" width="500" frameborder="0"></iframe><br/>
<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
<input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
</noscript>
明らかに、ユーザーが JS を無効にしない限り、これは何もしません。このプロセス中にエラーはスローされません。
非 AJAX 要求のペースでコードを表示すると、なるほど...
<script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k=6LfwkccSAAAAALr_z6vDBqkySowo5KIiR0mVM1BX"></script>
<noscript>
<iframe src="http://www.google.com/recaptcha/api/noscript?k=6LfwkccSAAAAALr_z6vDBqkySowo5KIiR0mVM1BX" height="300" width="500" frameborder="0"></iframe><br/>
<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
<input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
</noscript>
JS が有効になっているユーザーに対処するスクリプトの上部にある追加の行に注意してください。
したがって、質問は2つあると思います。WTF が発生しています。どうすれば修正できますか?
この問題について漠然とした言及を見つけましたが、適切な回答はありません。を使用した reCAPTCHA API に関する記述を見つけましdocument.write
たが、それが有効かどうかはわかりません。明らかな見落としがある場合は、お気軽に指摘してください。
リクエストごとに、AJAX 呼び出しは...
$(document).ready(function() {
$.get('/inc/email.php',
function(data){
console.log('Get success!');
$('#email-form').html(data);
console.log('Get added to #email-form!');
$('#email-form form').submit( function(){
$.ajax({
type: "POST",
url: "/inc/email.php",
data: $('#email-form form').serialize(),
success: function() {
console.log('Submit success!');
$('#email-form').html(data);
}
});
return false;
});
}
);
});
私がこれまでに試したこと:
- コードを書き直してリモート JS ファイルを取得し、document.write() 句を特定の ID に設定した要素への追加に置き換えてから、変更したコードをページ上でインラインで実行します。
- PHP reCAPTCHA ライブラリの代わりにプラグインなしで reCAPTCHA を表示する