Ошибка Recaptcha 2.0: элемент-заполнитель reCAPTCHA должен быть элементом или идентификатором - PullRequest
1 голос
/ 04 мая 2020

Я просмотрел все остальные посты, которые смог найти, и ни один из них не решил проблему для меня. У меня есть один вызов API ReCaptcha в заголовке моего документа:

<script src="https://www.google.com/recaptcha/api.js?hl=he-IL&onload=onloadCallback&render=explicit" type="text/javascript"></script>

А затем сразу после

var onloadCallback = function() {
    grecaptcha.render("recaptcha2", {
        sitekey: "6LendPIUAAAAAGQqB_2tq8fpgdGfBnEQA3v-CB0g",
        theme: "light"
    });
};

И я получаю следующую ошибку в моей консоли:

recaptcha__iw.js:60 Uncaught (in promise) Error: reCAPTCHA placeholder element must be an element or id
    at mv (recaptcha__iw.js:60)
    at Object.render (mootools-core.js:88)
    at onloadCallback (register:56)

Это моя живая страница: https://www.tofesyashir.co.il/register

Я пытался изменить порядок. Я попытался добавить asyn c defer к своему вызову скрипта, но ничего не помогло.

Также очень странно, если я вручную вызываю grecaptcha.render, ошибка снова запускается, даже если я ее использую на идентификаторы, которые 100% существуют на странице. По какой-то причине он вообще не будет отображаться на любом div.

Что вы, ребята, думаете?

1 Ответ

2 голосов
/ 04 мая 2020

Рассматривая трассировку стека исключений, которые вы получаете, рассказывает, что метод .render(), который на самом деле вызывается из mootools:

Uncaught (in promise) Error: reCAPTCHA placeholder element must be an element or id
    at mv (recaptcha__iw.js:60)
    at Object.render (mootools-core.js:88)
    at onloadCallback (register:56)

Поскольку используемые вами mootools минимизированы, я могу не совсем понятно, где именно это идет не так. Однако мне кажется, что в этом методе выполняется повторная привязка какого-либо параметра, и, вероятно, это приводит к тому, что первому apremeter назначается что-то еще, когда, в любом случае, в конце концов метод reCaptcha заканчивается вызовом.

Итак, я попытался удалить mootools с вашей веб-страницы в локальной копии - и это действительно решает проблему, reCaptcha отлично работает с удаленными mootools.

Для этого также есть открытый отчет об ошибке: https://github.com/google/recaptcha/issues/376. Приведенная там ссылка ведет к решению, опубликованному в соответствующем сообщении: обновление mootools вручную, похоже, решает проблему.

...