即使使用内联 JavaScript 函数 - Google ReCAPTCHA 也无法找到用户提供的函数:函数(响应) -

Muk*_*mar 2 javascript recaptcha dom-events react-google-recaptcha

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

ReCAPTCHA 找不到用户提供的函数:函数(响应)

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

屏幕截图-1: 截图-1

事实上,当我使用 JavaScript 原生函数(例如alert())时,它仍然无法工作。

屏幕截图-2: 截图-2

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

<script src='https://www.google.com/recaptcha/api.js'></script>
Run Code Online (Sandbox Code Playgroud)

第一次尝试 - 回调函数:

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

第二次尝试 - 回调函数:

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

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

Muk*_*mar 6

Google ReCAPTCHA 中的内联 JavaScript 函数永远不会工作。

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

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

在我的所有解决方案中,当我尝试实现内联函数时,它被读取为window[function (){}]or 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>
Run Code Online (Sandbox Code Playgroud)

请注意:为了更清楚起见,我还尝试在发布此问题之前最初实现回调函数,但由于脚本的顺序,它不起作用。感谢对另一个问题的回答,这对我有很大帮助,但在@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>
Run Code Online (Sandbox Code Playgroud)

我希望它将来能帮助像我这样的人。