Fancybox中的ReCaptcha不起作用

时间:2016-02-05 17:47:41

标签: jquery fancybox recaptcha

我正在尝试将Google ReCaptcha加载到我的网站上的fancybox AJAX浮动模式中,但无法显示ReCaptcha元素...

任何想法如何使这项工作?

如果我更改了fancybox打开代码以使用IFRAME,那么同样如果我将其设置为INLINE则可以正常工作 - 但是我需要它在AJAX窗口中工作...

打开fancybox窗口的HTML代码是:

<a class="various fancybox.ajax" href="reply.html">

我尝试过的reply.html页面中的代码是基本加载,也是明确的方法:

    <script type="text/javascript">
      var onloadCallback = function() {
        grecaptcha.render('RecaptchaField1', {
          'sitekey' : 'my_site_key'
        });
      };
</script>


<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"
        async defer>
    </script>

任何想法?Fancybox代码是:

<script type="text/javascript">
$(document).ready(function() {
$(".various").fancybox({
    maxWidth    : 900,
    maxHeight   : 630,
    fitToView   : false,
    width       : '85%',
    height      : '85%',
    autoSize    : false,
    closeClick  : false,
    openEffect  : 'none',
    closeEffect : 'none',
            padding         : 8

,ajax: {
    complete: function(jqXHR, textStatus) {
       alert("ajax loaded - render recaptcha here")

    }
}

});
});
</script>

1 个答案:

答案 0 :(得分:1)

Bellow代码对我来说很好。

  1. 包括Google Recaptcha api js

    <script src="https://www.google.com/recaptcha/api.js"></script>
    
  2. 添加元素Html

     <div class="g-recaptcha" id="recaptcha" ></div>
    
  3. 添加脚本

    <script type="text/javascript">
      $(document).ready(function() {
        $("[element_id_or_class]").fancybox({
           padding     : 0,
           maxWidth : 800,
           maxHeight    : 600,
           fitToView    : false,
           width        : 'auto',
           height       : 'auto',
           autoSize : true,
           openEffect   : 'none',
           closeEffect  : 'none',           
           ajax: {
             complete: function(jqXHR, textStatus) {
                grecaptcha.render('recaptcha', {
                    sitekey: [RECAPTCHA_SITE_KEY],
                    callback: function(response) {
                        console.log(response);
                    }           
                });
            }
          }
        });
     });
     </script>