0

我正在使用 ReCAPTCHA 版本 V2。在回调函数(即data-callback)上,我收到以下错误消息。

ReCAPTCHA 找不到用户提供的功能:功能(响应)

现在,我在网上看到的大多数帖子/解决方案都与本地回调函数有关,当在g-recaptcha div的data-callback属性中引用时,该函数不会被调用。但是,就我而言,即使是内联函数也不会被调用。请看下面的图片。

截图 1: 截图-1

事实上,当我在使用诸如 alert() 之类的 JavaScript 原生函数时,它仍然无法正常工作。

截图 2: 截图-2

这是我正在使用的 JS 代码。

<script src='https://www.google.com/recaptcha/api.js'></script>

第一次尝试 - 回调函数:

<div class="g-recaptcha" data-sitekey="Please add your site key if you want to test" data-callback="function (response) { alert('working: ', response);}"></div>

第二次尝试 - 回调函数:

<div class="g-recaptcha" data-sitekey="Please add your site key if you want to test" data-callback="Window.alert('hi');"></div>

如果您能帮助我理解为什么 google API 以一种完全奇怪的方式响应,我将非常感谢您的帮助。

4

1 回答 1

1

Google ReCAPTCHA 中的内联 JavaScript 函数将永远无法工作。

如果它可以节省某人的时间,我会在这里发布他的答案。

所有功劳归于@Christos Lytras。非常感谢他帮助我理解了 Google ReCAPTCHA 背后的 JS。他在评论部分所说的关于 Recaptcha 的 JS 试图通过它在全局窗口对象中的名称来识别函数,是绝对正确的。因此,我的实现不起作用并且永远不会起作用(至少在 V2 版本中)。

在我尝试实现内联函数时,在我的所有解决方案中,它都被读取为window[function (){}]window[Window.alert('hi');]正确的 JS 语法。因此,当我按照以下方式尝试时,它就像魅力一样。

正确的方法

<script>window.myCallBackFunction = function() { alert("HI"); }</script>
<script src='https://www.google.com/recaptcha/api.js'></script>
<div class="g-recaptcha" data-sitekey="XXX" data-callback="myCallBackFunction" ></div>

请注意:为了更清楚起见,我还尝试在发布此问题之前最初实现回调函数,但由于脚本的顺序,它不起作用。感谢在@Christos Lytras的解释之后对另一个问题有很大帮助的答案。一开始,我是按以下顺序实现的。

不正确的方法

<script src='https://www.google.com/recaptcha/api.js'></script>
<script>window.myCallBackFunction = function() { alert("HI"); }</script>
<div class="g-recaptcha" data-sitekey="XXX" data-callback="myCallBackFunction" ></div>

我希望它可以帮助像我这样的人,在未来。

于 2020-06-27T14:03:23.603 回答