我正在使用recaptcha
v2
我偶尔会收到以下错误(有时我不会收到错误,有时候我会收到错误)
Uncaught ReferenceError: grecaptcha is not defined
似乎是因为内部的http请求。需要一些时间来获得另一个js recaptcha__en.js
。同时grecaptcha
的实际渲染代码执行。
那么避免这个问题的标准解决方案是什么?
PS:当然我正在寻找除setTimeout
答案 0 :(得分:18)
Recaptcha有一个onload
回调,一旦加载了recaptcha就会运行。将代码放在该回调函数中。
https://developers.google.com/recaptcha/docs/display
<script>
function onloadCallback() {
/* Place your recaptcha rendering code here */
}
</script>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"></script>
答案 1 :(得分:4)
我已通过以下方式订购脚本解决了这个问题
<div id="review_recaptcha"></div>
<script type="text/javascript">
var review_recaptcha_widget;
var onloadCallback = function() {
if($('#review_recaptcha').length) {
review_recaptcha_widget = grecaptcha.render('review_recaptcha', {
'sitekey' : '<?php echo $site_key?>'
});
}
};
</script>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
答案 2 :(得分:0)
如果语言对你有用,你可以在调用api时设置In [9]: x
Out[9]:
array([[ 0.62047293, 0.02957529, 0.88920602, 0.57581068],
[ 0.40903378, 0.80748886, 0.83018903, 0.22445871],
[ 0.87296866, 0.94234112, 0.70001789, 0.99333763],
[ 0.96689113, 0.35128491, 0.35775966, 0.26734985]])
In [10]: [" ".join(item) for item in x.astype('S4')]
Out[10]:
['0.62 0.02 0.88 0.57',
'0.40 0.80 0.83 0.22',
'0.87 0.94 0.70 0.99',
'0.96 0.35 0.35 0.26']
In [11]: [" ".join(item) for item in x.astype('S14')]
Out[11]:
['0.620472934011 0.029575285327 0.889206021736 0.575810682998',
'0.409033783485 0.807488858152 0.830189034897 0.224458707937',
'0.872968659668 0.942341118836 0.700017893576 0.993337626766',
'0.966891127767 0.351284905075 0.357759658063 0.267349854182']
变量!
因此:
hl=en
答案 3 :(得分:0)
我的问题通过在脚本代码中进行以下更改得到解决(:
即从内部路径
<script src='static/js/recaptcha/api.js'></script>
到外部谷歌路径,即
<script src='https://www.google.com/recaptcha/api.js'></script>
答案 4 :(得分:0)
有时刷新后,应用程序将脚本'https://www.google.com/recaptcha/api.js
加载几次,请确保您的应用程序没有多个<script async="" defer="" src="https://www.google.com/recaptcha/api.js"></script>
答案 5 :(得分:0)
它可以在登录页面上运行,并且也可以使用bootstrap 4弹出窗口形式:
<script src="https://www.google.com/recaptcha/api.js?render=ADD-YOUR-RECAPTCHA-SITE-KEY-HERE"></script>
<script>
var interval = setInterval(function(){
if(window.grecaptcha){
grecaptcha.ready(function() {
grecaptcha.execute('ADD-YOUR-RECAPTCHA-SITE-KEY-HERE', {action: 'homepage'}).then(function(token) {
$('#i-recaptcha').prepend('<input type="hidden" name="g-recaptcha-response" value="' + token + '">');
});
});
clearInterval(interval);
}
}, 100);
</script>
感谢您提出这个问题。 :)
答案 6 :(得分:0)
我知道这是一个老问题,但这也许会对某人有所帮助。我收到此“未捕获的ReferenceError:未定义grecaptcha”错误的原因是,因为我无法访问www.gstatic.com上托管的依赖项js文件(recaptcha_en.js)。解决了这个问题后,它对我有用。