活生生的例子:
当我查看源页面时,一切正常,但是当我通过 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 的用户。
所以我想这个问题有两个方面。WTF 正在发生,我该如何解决?
我发现一些关于这个问题的模糊提及,但没有像样的答案。我发现有人提到了 reCAPTCHA API using 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