模态窗口内的recaptcha(fancybox)

时间:2010-08-30 18:46:41

标签: ruby-on-rails modal-dialog lightbox fancybox recaptcha

我正在尝试通过fancybox中的ajax加载表单。它工作得很好,一切正常。

我使用了recaptcha(rails)插件并在表单上获得了验证码。现在,当fancybox加载时,它会被重定向到一个只有验证码的空白页面。

我认为这是iframe和模态窗口的一些问题?

是否有人在fancybox中的表单上加载了recaptcha?如果你能给我一个例子,我会帮助你。

感谢您的帮助...

4 个答案:

答案 0 :(得分:5)

我和fancybox有同样的问题。我使用recaptcha ajax API解决了它: https://developers.google.com/recaptcha/docs/display#AJAX

答案 1 :(得分:0)

我有同样的问题,虽然只在Safari(也可能是Chrome)。它在Firefox中运行良好。它与Ruby无关(我使用Grails),所有jQuery弹出窗口都出现问题(我尝试过blockUI,SimpelModal和ThickBox)。

据我所知,由于某种原因,当jQuery在domtree中移动iframe(这就是ReCaptcha)时,Webkit决定将iframe内容加载为新页面。或者可以使用iframe内容替换页面内容。

我很确定这是一个Webkit错误,我不知道是否有可能修复。

修改:结果证明可以修复:

$('#captcha-form script').remove();

'captcha-form'是包含验证码的表单的id。删除脚本标记,以便在jQuery移动它们之后Safari重新呈现它们时第二次不执行脚本。脚本创建的事件处理程序不在脚本标记中,因此它们可以存活。

我认为Safari会在重新呈现标记时重新执行javascript。当对话框打开时,模态对话框中的任何内容都会重新呈现。此外,我怀疑在重新渲染之后,recaptcha使用的document.write对它的位置感到困惑并且混乱。

答案 2 :(得分:0)

如果有人还在寻找一个简单的解决方案,我已经设法通过将其作为iframe调用来获得fancybox中的recaptcha

如果从类选择器中调用它:

<script>
$(document).ready(function() {
     $(".example").fancybox({
          fitToView   : true,
          autoSize    : false,
          openEffect  : 'elastic',
          closeEffect : 'elastic'
     });
});
</script>

然后在你的HTML

<a href="http://url.com/iframe" class="example fancybox.iframe>Captcha Fancybox</a>

或者,如果您以编程方式触发fancybox,请执行以下操作:

$.fancybox({
     width        : '520px',
     height       : '230px',
     autoSize     : false,
     openEffect   : 'elastic',
     closeEffect  : 'elastic',
     'href'       : 'http://www.url.cc',
     type         : 'iframe'
  });

答案 3 :(得分:0)

通过fancybox中的ajax重新加载表单的简单解决方案。

<%= recaptcha_tags ajax: true %>