Когда я явно отображаю Recaptcha v2 и затем сбрасываю его перед удалением из DOM, через ~ 40 секунд я получаю ошибку в консоли браузера.
У меня есть JSFiddle , которыйможет использоваться для воспроизведения проблемы.
Вот соответствующая выдержка из кода:
const recaptchaHolder = document.getElementById('...');
const recaptchaWidgetId = grecaptcha.render(recaptchaHolder, {/*...*/});
// then later
grecaptcha.reset(recaptchaWidgetId);
recaptchaHolder.parentElement.removeChild(recaptchaHolder);
Я получаю ошибку:
Uncaught (в обещании)Тайм-аут
со следующей трассировкой стека (фактическая трассировка стека может отличаться, так как это происходит в сильно уменьшенном коде):
setTimeout (async)
J @ recaptcha__en.js:100
(anonymous) @ recaptcha__en.js:285
tb @ recaptcha__en.js:284
mj @ recaptcha__en.js:456
(anonymous) @ recaptcha__en.js:458
Я пытался использовать параметр 'error-callback'
из документация , чтобы поймать эту ошибку, но это не помогло - ошибка все еще не исправлена, и этот обратный вызов не вызывается.
Еще одно наблюдение: если я пропущу вызов grecaptcha.reset
доудалив элемент из DOM, тогда ошибки не произойдет. Однако , это может привести к несовместимому пользовательскому интерфейсу: если пользователь вызывает recaptcha (например, с помощью изображений), и элемент просто удаляется из DOM без вызова grecaptcha.reset
, то HTML-запрос не являетсявычищен из DOM.
Я ищу способы обработки вышеупомянутой ошибки или обработки удаления recaptcha другим способом (если я делаю это сейчас неправильно)