我正在尝试在模态(jquery)对话框中显示 ReCaptcha 。我用blockUI,SimpelModal和ThickBox尝试过它。对于它们中的每一个,它在Firefox中完美运行,而在Safari中完全没有(没有测试过Chrome)。
当对话框打开时,Safari突然决定只显示ReCaptcha。
我怀疑这可能是Webkit中的错误,也可能是ReCaptcha中的错误。但我无法理解什么会让Safari以这种方式对待ReCaptcha。或者它是ReCaptcha javascript与它混淆?这对我来说是一个完全的谜。
我很想听听有关解决方法的任何想法。
修改:一个额外的细节:一旦Safari只显示ReCaptcha,页面的标题仍然是原始页面的标题。来源仍然是原始来源。即使DOM树看起来也不错。然而它只显示了ReCaptcha。
如果我用另一个iframe替换recaptcha,一切都显示正常。在没有模态对话框的情况下在页面中显示recaptcha也可以正常工作。所以它真的是导致问题的Safari + ReCaptcha + jQuery popup的组合。
编辑:我刚注意到,当禁用Javacript时,ReCaptcha仅使用iframe。所以我的iframe测试无关紧要。它必须是ReCaptcha javascript(来自谷歌,所以你期望体面的跨浏览器功能),jQuery(通常擅长跨浏览器的东西)和Safari(Webkit,与谷歌的Chrome相关)之间的不兼容。
为什么这种特定的组合会如此糟糕地失败,这仍然是一个完全的谜。
答案 0 :(得分:1)
这是我的解决方案:
$('#captcha-form script').remove();
'captcha-form'是包含验证码的表单的id。删除脚本标记,以便在jQuery移动它们之后Safari重新呈现它们时第二次不执行脚本。脚本创建的事件处理程序不在脚本标记中,因此它们可以存活。
适用于Safari和Firefox 4.我现在要在其他浏览器中对此进行测试。
答案 1 :(得分:0)
我遇到了同样的问题,并在使用Recaptcha ajax API创建了包含它的模态div之后创建验证码来解决它:http://code.google.com/apis/recaptcha/docs/display.html
$("#EmailSignupModal").dialog('open');
//only call create the first time the dialog is opened.
if ($("#recaptcha_area").length == 0){
Recaptcha.create("--public key--", "EmailCaptchaContainer", {
theme: "clean",
callback: Recaptcha.focus_response_field
});
}