как добавить метод загрузки grecaptcha в компонент Vue. Если не загружен grecaptcha.render, это не функция
const script = document.createElement("script");
script.src = '${URL}?render=explicit&hl=TR';
script.async = true;
script.defer = true;
document.body.appendChild(script);
this.initReCaptcha();
initReCaptcha: function () {
setTimeout(function () {
if (typeof grecaptcha === 'undefined') {
this.initReCaptcha();
} else {
grecaptcha.render('recaptcha', {
sitekey: 'XXXX',
callback: this.submit,
'expired-callback': this.expired
});
}
}.bind(this), 100);
}
работает, когда я устанавливаю таймаут 1000. но это слишком поздно.
Сценарий recaptcha был обновлен 4 мая 2018 года 9: 07: 30.349 PM GMT (на основе временной метки сценария recaptcha). Grecaptcha загружается, однако функция рендеринга имеет задержку, поэтому recaptcha не отображается в пользовательском интерфейсе (grecaptcha.render не является функционалом n). Возможное исправление заключается в проверке функции рендеринга перед попыткой загрузить recaptcha.
Вот исправление:
initReCaptcha: function () {
setTimeout(function () {
if (typeof grecaptcha === 'undefined' && typeof grecaptcha.render ==='undefined') {
this.initReCaptcha();
} else {
grecaptcha.render('recaptcha', {
sitekey: 'XXXX',
callback: this.submit,
'expired-callback': this.expired
});
}
}.bind(this), 100);
}
Надеюсь, это поможет вам. ура
Я выяснил, что с тех пор, как два дня назад многие люди получили сообщение об ошибке:
grecaptcha.render is not a function
Ну, это работает для меня. Может быть, это помогает кому-то в
Я разбиваю его на части, чтобы вы могли легко прочитать его:
mounted(){
if (typeof grecaptcha === "undefined") {
var script = document.createElement("script");
script.src = "https://www.google.com/recaptcha/api.js?render=explicit";
script.onload = this.renderWait;
document.head.appendChild(script);
} else this.render();
}
Если grecaptcha не загружен, я создам скрипт и дождитесь его загрузки. Если так вызывается renderWait
renderWait() {
setTimeout(() => {
if (typeof grecaptcha !== "undefined" && typeof grecaptcha.render !== "undefined") this.render();
else this.renderWait();
}, 200);
},
Когда мы наконец-то grecaptcha сделаем это:
render() {
const recaptchaDiv = document.createElement('div');
recaptchaDiv.className = 'outside-badge';
document.body.appendChild(recaptchaDiv);
this.widgetId = grecaptcha.render(recaptchaDiv, {
sitekey: this.sitekey,
size: "invisible",
badge: this.badge || "bottomright",
theme: this.theme || "light",
callback: token => {
this.callback(token);
grecaptcha.reset(this.widgetId);
}
});
this.loaded = true;
},
Может быть, это поможет вам :)