Safari可以在模态对话框中显示ReCaptcha吗?

时间:2011-06-10 10:36:02

标签: jquery safari webkit modal-dialog recaptcha

我正在尝试在模态(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相关)之间的不兼容。

为什么这种特定的组合会如此糟糕地失败,这仍然是一个完全的谜。

2 个答案:

答案 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
   });
}