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
removeEventListeners();
// Cargar etiquetas de script de AdSense
loadAdSenseScripts();
// Cargar etiquetas de script de AdSense y esperar a que cargue
// 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
executeAdSensePushScripts();
// Ejecutar scripts de push de AdSense
executeAdSensePushScripts();
// Agregar clase loaded al body
document.body.classList.add(CONFIG.loadedClass);
// Agregar clase loaded al body
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
* @param {Function} callback - Función a ejecutar cuando la biblioteca cargue
*/
function loadAdSenseScripts() {
function loadAdSenseScripts(callback) {
const delayedScripts = document.querySelectorAll('script[data-adsense-script]');
if (delayedScripts.length === 0) {
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;
}
debugLog('Se encontraron ' + delayedScripts.length + ' script(s) retrasado(s) de AdSense');
var scriptsLoaded = 0;
var totalScripts = delayedScripts.length;
delayedScripts.forEach(function(oldScript) {
const newScript = document.createElement('script');
@@ -95,6 +106,23 @@
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
oldScript.parentNode.replaceChild(newScript, oldScript);
});

View File

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