Я реализую Google reCAPTCHA v3 с Angular 6.
<script src='https://www.google.com/recaptcha/api.js?render=KEY'></script>
Добавлен скрипт в index.html
В моем компоненте приложения
constructor(
@Inject(DOCUMENT) private document: any
) {
this.grecaptcha = this.document.grecaptcha;
}
и когда я нажимаю "Отправить форму",
this.grecaptcha.execute('KEY', { action: 'action_name' })
.then(function (token) {
// Verify the token on the server.
console.info(token);
});
Но,
ERROR TypeError: Cannot read property 'execute' of undefined





объект должен быть доступен из окна, поэтому все, что вам нужно, это объявить его поверх вашего ts файла:
declare const grecaptcha: any;
тогда вы можете использовать его в своем классе, например:
grecaptcha.execute('KEY', { action: 'action_name' })
.then(function (token) {
// Verify the token on the server.
console.info(token);
})
Вы также можете попробовать установить типизацию @types/grecaptcha, чтобы получить какие-то подсказки, чтобы сделать вашу жизнь немного проще.
все еще не получается grecaptcha
index.html (не V2) ... Правильный скрипт и siteKey помогут вам загрузить внешнюю библиотеку Google и сделать ее доступной в window.grecaptcha.
Я предлагаю вам еще один способ добавить скрипт с помощью машинописного кода в ваш component.ts. Просто вызовите эту функцию в onInit() или AfterViewInit().addScriptSrc() {
let script: any = document.getElementById('script');
if (!script) {
script = document.createElement('script');
}
const body = document.body;
script.innerHTML = '';
script.src = 'https://www.google.com/recaptcha/api.js?render=<your_sitekey>';
script.async = false;
script.defer = true;
body.appendChild(script);
}
component.ts просто нужно объявить объект окна с помощью
declare const window: any;window.grecaptcha.ready(function() {
window.grecaptcha.execute(<sitekey>, {action: 'signup'}).then((token) => {
//Do anything with captcha token
});
});
Функция ready() убедитесь, что внешняя библиотека успешно загружена из google api, прежде чем вы execute получите токен.
Property 'grecaptcha' does not exist on type 'Window'