fix(js): wait for adsbygoogle.js before push scripts

Race condition caused push to execute before library loaded.
Add onload callback to loadAdSenseScripts() function.
This commit is contained in:
FrankZamora
2025-12-10 12:44:04 -06:00
parent fae4def974
commit 555541b2a0
2 changed files with 37 additions and 9 deletions

View File

@@ -54,31 +54,42 @@
// Remover event listeners para prevenir múltiples triggers // Remover event listeners para prevenir múltiples triggers
removeEventListeners(); removeEventListeners();
// Cargar etiquetas de script de AdSense // Cargar etiquetas de script de AdSense y esperar a que cargue
loadAdSenseScripts(); // IMPORTANTE: Debe esperar a que adsbygoogle.js cargue antes de ejecutar push
loadAdSenseScripts(function() {
debugLog('Biblioteca AdSense cargada, ejecutando push scripts...');
// Ejecutar scripts de push de AdSense // Ejecutar scripts de push de AdSense
executeAdSensePushScripts(); executeAdSensePushScripts();
// Agregar clase loaded al body // Agregar clase loaded al body
document.body.classList.add(CONFIG.loadedClass); document.body.classList.add(CONFIG.loadedClass);
debugLog('Carga de AdSense completada'); debugLog('Carga de AdSense completada');
});
} }
/** /**
* Encuentra y carga todas las etiquetas de script de AdSense retrasadas * Encuentra y carga todas las etiquetas de script de AdSense retrasadas
* @param {Function} callback - Función a ejecutar cuando la biblioteca cargue
*/ */
function loadAdSenseScripts() { function loadAdSenseScripts(callback) {
const delayedScripts = document.querySelectorAll('script[data-adsense-script]'); const delayedScripts = document.querySelectorAll('script[data-adsense-script]');
if (delayedScripts.length === 0) { if (delayedScripts.length === 0) {
debugLog('No se encontraron scripts retrasados de AdSense'); debugLog('No se encontraron scripts retrasados de AdSense');
// Ejecutar callback de todas formas (puede haber ads sin script principal)
if (typeof callback === 'function') {
callback();
}
return; return;
} }
debugLog('Se encontraron ' + delayedScripts.length + ' script(s) retrasado(s) de AdSense'); debugLog('Se encontraron ' + delayedScripts.length + ' script(s) retrasado(s) de AdSense');
var scriptsLoaded = 0;
var totalScripts = delayedScripts.length;
delayedScripts.forEach(function(oldScript) { delayedScripts.forEach(function(oldScript) {
const newScript = document.createElement('script'); const newScript = document.createElement('script');
@@ -95,6 +106,23 @@
newScript.crossorigin = oldScript.getAttribute('crossorigin'); newScript.crossorigin = oldScript.getAttribute('crossorigin');
} }
// Esperar a que cargue antes de ejecutar callback
newScript.onload = function() {
scriptsLoaded++;
debugLog('Script cargado (' + scriptsLoaded + '/' + totalScripts + '): ' + newScript.src.substring(0, 50) + '...');
if (scriptsLoaded === totalScripts && typeof callback === 'function') {
callback();
}
};
newScript.onerror = function() {
scriptsLoaded++;
debugLog('Error cargando script: ' + newScript.src);
if (scriptsLoaded === totalScripts && typeof callback === 'function') {
callback();
}
};
// Reemplazar script viejo con el nuevo // Reemplazar script viejo con el nuevo
oldScript.parentNode.replaceChild(newScript, oldScript); oldScript.parentNode.replaceChild(newScript, oldScript);
}); });

View File

@@ -18,7 +18,7 @@ if (!defined('ABSPATH')) {
} }
// Definir constante de versión del tema // Definir constante de versión del tema
define('ROI_VERSION', '1.0.21'); define('ROI_VERSION', '1.0.22');
// ============================================================================= // =============================================================================
// 1. CARGAR AUTOLOADER MANUAL // 1. CARGAR AUTOLOADER MANUAL