新的Google reCAPTCHA JavaScript命名空间回调

oymdgrw7  于 2023-01-11  发布在  Java
关注(0)|答案(2)|浏览(150)

我们正在尝试在我们的网站上实现新的Google reCAPTCHA,但是当我们尝试使用命名空间函数从它加载回调时,回调不运行。
将回调更改为不使用回调可以正常工作。我们正在对Google Maps API进行类似的操作,它工作正常。
有什么办法可以解决这个问题,或者这是新的谷歌reCAPTCHA系统的限制?

    • 代码**
<script>
    var namespace = {};
    namespace.captcha = function() {
        alert("Hello world!")
    };
</script>
<script src="//www.google.com/recaptcha/api.js?onload=namespace.captcha&render=explicit" async defer></script>

真正的问题是我们想把所有的代码都 Package 在使用揭示模块模式的命名空间脚本中,一个解决办法是创建一个全局变量,并将其用作回调函数,但这并不是我所希望的。

    • 全局回调**
<script>
    var namespace = {};
    namespace.captcha = (function() {         
        function call() {
            alert("Hello world!")
       };
       window.callback = namespace.captcha.call;   
       return call:call;
    })();
</script>
<script src="//www.google.com/recaptcha/api.js?onload=callback&render=explicit" async defer></script>
c6ubokkw

c6ubokkw1#

您可以通过使用Javascript API设置回调函数来完成此操作。
这将允许您在使用框架时使用命名空间回调,甚至是范围保护回调。
我无法测试,所以举个例子:

var script = document.createElement('script');

script.id = 'container'
script.src = '//www.google.com/recaptcha/api.js?render=explicit';
script.async = true;
script.defer = true;

script.onload = () => { ... };

document.body.appendChild(script);

适用于V3

您的script.onload函数可能类似于:

grecaptcha.ready(function() {
  namespace.captcha();
});

适用于V2

您的script.onload函数可能类似于:

grecaptcha.render('container', { 
  callback: namespace.captcha
});
bq3bfh9z

bq3bfh9z2#

文件api.js加载另一个东西。
参数onload=functionCallback位于:
//www.google.com/recaptcha/api.js?onload=callback&render=explicit
用于确定api.js中的填充项加载时要加载的函数。

相关问题