Google ReCaptcha 未在 jsx 组件呈现之前加载
Google ReCaptcha not loading prior to jsx component rendering
我正在尝试创建一个反应组件来处理我的 recaptcha。我需要使用数据回调来设置我的组件的值,因为我们没有使用表单标签。发生的事情是,通过 Google 的重新验证,他们通过 iframe 加载字段。这意味着我无法访问包含来自 Google 的响应的文本区域。只有在验证后我才需要获取 textarea 的值。我无法这样做,因为 API 在我的反应组件渲染之前没有加载。如果我尝试在我的组件中使用 grecaptcha,它是未定义的。但是,在页面加载后,我可以在控制台中使用 grecaptcha。
我目前尝试使用 recaptcha 的方式(如下所示)不起作用。对象 grecaptcha(由 google 创建的对象)未定义,数据回调永远不会被调用。
我宁愿避免使用插件或任何来自 github 的东西。这似乎不应该那么复杂。如果有任何帮助,我确实可以访问 lodash,以及 react-addons。
这在底部的正文标签中
<script src='https://www.google.com/recaptcha/api.js'></script>
这是 React 组件的 jsx。
(function() {
"use strict";
/**
* Represents an HTML text element
*/
class Captcha extends COS.Input.Base
{
getCaptchaResponse() {
alert("working");
}
renderEdit()
{
return (
<div
ref="captcha"
id="captcha"
name="captcha"
data-sitekey="6Lc9fg4TAAAAAGYyFskow-g2b4IQ_rLvsLkHicuS"
data-callback={this.getCaptchaResponse}
className="g-recaptcha"></div>
);
}
}
Captcha.makeDefaultProps({
// Extend Default Props here
});
COS.Input.Captcha = Captcha;
})();
我在 Whosebug 之外的帮助下解决了这个问题。我想回来解决这个问题。这是一个与我最初理解的不同的问题。我误解了回调函数的使用方式。它需要是全局函数名称的字符串。但是,这对我没有任何帮助,因为我需要验证码内部的响应 class.
下面的代码本质上是将我的回调附加到 window,然后在组件安装后呈现 recaptcha。我现在在 class 中有了我的回复,并且可以在我不使用表单标签
的情况下设置要提交的组件的值
这是现在的页脚行
<script src='https://www.google.com/recaptcha/api.js?onload=getCaptchaResponse&render=explicit' async defer></script>
(function() {
"use strict";
/**
* Represents a Google ReCaptcha
*/
class Captcha extends COS.Input.Base {
getCaptchaResponse(response) {
console.log(response);
}
renderEdit() {
window['getCaptchaResponse'] = () => {
grecaptcha.render("captcha", {
sitekey: "6Lc9fg4TAAAAAGYyFskow-g2b4IQ_rLvsLkHicuS",
callback: (this.getCaptchaResponse) ? this.getCaptchaResponse : undefined,
});
};
return ( < div id = "captcha"
ref = "captcha"
name = "captcha"
data-onloadcallbackname = {
'getCaptchaResponse'
}
data-verifycallbackname = {
'getCaptchaResponse'
} >
< /div>
);
}
}
Captcha.makeDefaultProps({
/ / Extend Default Props here
});
COS.Input.Captcha = Captcha;
})();
我正在尝试创建一个反应组件来处理我的 recaptcha。我需要使用数据回调来设置我的组件的值,因为我们没有使用表单标签。发生的事情是,通过 Google 的重新验证,他们通过 iframe 加载字段。这意味着我无法访问包含来自 Google 的响应的文本区域。只有在验证后我才需要获取 textarea 的值。我无法这样做,因为 API 在我的反应组件渲染之前没有加载。如果我尝试在我的组件中使用 grecaptcha,它是未定义的。但是,在页面加载后,我可以在控制台中使用 grecaptcha。
我目前尝试使用 recaptcha 的方式(如下所示)不起作用。对象 grecaptcha(由 google 创建的对象)未定义,数据回调永远不会被调用。
我宁愿避免使用插件或任何来自 github 的东西。这似乎不应该那么复杂。如果有任何帮助,我确实可以访问 lodash,以及 react-addons。
这在底部的正文标签中
<script src='https://www.google.com/recaptcha/api.js'></script>
这是 React 组件的 jsx。
(function() {
"use strict";
/**
* Represents an HTML text element
*/
class Captcha extends COS.Input.Base
{
getCaptchaResponse() {
alert("working");
}
renderEdit()
{
return (
<div
ref="captcha"
id="captcha"
name="captcha"
data-sitekey="6Lc9fg4TAAAAAGYyFskow-g2b4IQ_rLvsLkHicuS"
data-callback={this.getCaptchaResponse}
className="g-recaptcha"></div>
);
}
}
Captcha.makeDefaultProps({
// Extend Default Props here
});
COS.Input.Captcha = Captcha;
})();
我在 Whosebug 之外的帮助下解决了这个问题。我想回来解决这个问题。这是一个与我最初理解的不同的问题。我误解了回调函数的使用方式。它需要是全局函数名称的字符串。但是,这对我没有任何帮助,因为我需要验证码内部的响应 class.
下面的代码本质上是将我的回调附加到 window,然后在组件安装后呈现 recaptcha。我现在在 class 中有了我的回复,并且可以在我不使用表单标签
的情况下设置要提交的组件的值这是现在的页脚行
<script src='https://www.google.com/recaptcha/api.js?onload=getCaptchaResponse&render=explicit' async defer></script>
(function() {
"use strict";
/**
* Represents a Google ReCaptcha
*/
class Captcha extends COS.Input.Base {
getCaptchaResponse(response) {
console.log(response);
}
renderEdit() {
window['getCaptchaResponse'] = () => {
grecaptcha.render("captcha", {
sitekey: "6Lc9fg4TAAAAAGYyFskow-g2b4IQ_rLvsLkHicuS",
callback: (this.getCaptchaResponse) ? this.getCaptchaResponse : undefined,
});
};
return ( < div id = "captcha"
ref = "captcha"
name = "captcha"
data-onloadcallbackname = {
'getCaptchaResponse'
}
data-verifycallbackname = {
'getCaptchaResponse'
} >
< /div>
);
}
}
Captcha.makeDefaultProps({
/ / Extend Default Props here
});
COS.Input.Captcha = Captcha;
})();