diff --git a/js/hcaptcha-loader.js b/js/hcaptcha-loader.js index 6adf9dc..b2d5271 100644 --- a/js/hcaptcha-loader.js +++ b/js/hcaptcha-loader.js @@ -10,14 +10,29 @@ Drupal.behaviors.hcaptcha.attach(); }; - if (!document.getElementById('hcaptcha-src') && drupalSettings.hcaptcha) { - var el = document.createElement('script'); - el.type = 'text/javascript'; - el.src = drupalSettings.hcaptcha.src; - el.id = 'hcaptcha-src'; - el.async = true; - el.defer = true; - document.getElementsByTagName('head')[0].appendChild(el); + if (window.IntersectionObserver) { + const observer = new IntersectionObserver((entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + loadhCaptchaScript() + } + }); + }); + observer.observe(document.querySelector('form')); + } else { + loadhCaptchaScript(); + } + + const loadhCaptchaScript = function() { + if (!document.getElementById('hcaptcha-src') && drupalSettings.hcaptcha) { + var el = document.createElement('script'); + el.type = 'text/javascript'; + el.src = drupalSettings.hcaptcha.src; + el.id = 'hcaptcha-src'; + el.async = true; + el.defer = true; + document.getElementsByTagName('head')[0].appendChild(el); + } } const renderWidget = function (element) {