新的Google reCAPTCHA JavaScript命名空间回调函数

16

我们正在尝试在网站上实施新的Google reCAPTCHA,但是当我们尝试使用带有命名空间函数的回调来加载它时,回调不会运行。

更改回调以不使用回调会正常工作。 我们正在使用Google Maps API进行类似的操作,这可以正常工作。

有什么方法可以解决这个问题,还是这是新的Google 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>

问题在于我们希望将所有代码都封装在使用揭示模块化模式的命名空间脚本中。解决这个问题的方法是创建一个全局变量并将其用作回调,但这并不完全符合我的期望。

全局回调

<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>

是的,看起来他们不允许这样做。 - Emmanuel Delay
更改回调以不使用回调函数可以正常工作。您是否意味着不使用命名空间? - xr280xr
我遇到了同样的问题,而且我们还会缩小函数名称,因此我们的全局命名空间函数名称是不可预测的。 - webdevinci
使用<script src="//www.google.com/recaptcha/api.js?onload=namespace.captcha.call&render=explicit" async defer></script>的问题是什么? - Roumelis George
1
我也无法使用命名空间模块函数作为回调来实现recaptcha V2。 - Gurnzbot
应该是 call.call 还是 call:call? - speciesUnknown
2个回答

2
你可以使用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
});

0

文件api.js加载其他内容。

参数onload=functionCallback中:

//www.google.com/recaptcha/api.js?onload=callback&render=explicit

用于确定在加载api.js中的内容时将要加载的函数。


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接