fix(adsense): Anchor/Vignette solo visibles cuando AdSense llena slot
- Anchor Ads: Cambiar de visibility:hidden a transform:translateY() para que AdSense pueda medir dimensiones del slot - Vignette Ads: Solo mostrar overlay cuando data-ad-status="filled" - Mover card Exclusiones a columna izquierda en admin 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -254,31 +254,68 @@
|
||||
}
|
||||
|
||||
/**
|
||||
* Muestra el vignette
|
||||
* Muestra el vignette SOLO si AdSense lleno el slot
|
||||
*/
|
||||
function showVignette() {
|
||||
if (!canShow() || triggered) return;
|
||||
|
||||
triggered = true;
|
||||
|
||||
// Mostrar overlay
|
||||
overlay.classList.add('active');
|
||||
document.body.style.overflow = 'hidden';
|
||||
// Buscar el elemento ins de AdSense dentro del overlay
|
||||
var ins = overlay.querySelector('ins.adsbygoogle');
|
||||
if (!ins) return;
|
||||
|
||||
// Incrementar contadores
|
||||
pageShowCount++;
|
||||
var sessionCount = parseInt(sessionStorage.getItem(STORAGE_KEYS.sessionCount) || '0');
|
||||
sessionStorage.setItem(STORAGE_KEYS.sessionCount, (sessionCount + 1).toString());
|
||||
// Funcion para mostrar el overlay cuando el ad esta listo
|
||||
function showIfFilled() {
|
||||
var status = ins.getAttribute('data-ad-status');
|
||||
if (status === 'filled') {
|
||||
// AdSense lleno el slot - mostrar overlay
|
||||
overlay.classList.add('active');
|
||||
document.body.style.overflow = 'hidden';
|
||||
|
||||
// Manejar delay del boton cerrar
|
||||
var closeBtn = overlay.querySelector('.roi-vignette-close');
|
||||
if (closeBtn && closeBtn.classList.contains('delayed')) {
|
||||
var delay = parseInt(closeBtn.dataset.delay || '0') * 1000;
|
||||
|
||||
setTimeout(function() {
|
||||
closeBtn.classList.remove('delayed');
|
||||
}, delay);
|
||||
// Incrementar contadores
|
||||
pageShowCount++;
|
||||
var sessionCount = parseInt(sessionStorage.getItem(STORAGE_KEYS.sessionCount) || '0');
|
||||
sessionStorage.setItem(STORAGE_KEYS.sessionCount, (sessionCount + 1).toString());
|
||||
return true;
|
||||
} else if (status === 'unfilled') {
|
||||
// AdSense no tiene anuncio - no mostrar nada
|
||||
triggered = false; // Permitir reintento mas tarde
|
||||
return true; // Detener observacion
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Verificar si ya tiene estado
|
||||
if (showIfFilled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Observar cambios en data-ad-status
|
||||
var observer = new MutationObserver(function(mutations) {
|
||||
mutations.forEach(function(mutation) {
|
||||
if (mutation.type === 'attributes' && mutation.attributeName === 'data-ad-status') {
|
||||
if (showIfFilled()) {
|
||||
observer.disconnect();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
observer.observe(ins, {
|
||||
attributes: true,
|
||||
attributeFilter: ['data-ad-status']
|
||||
});
|
||||
|
||||
// Timeout de seguridad: despues de 5s desconectar observer
|
||||
setTimeout(function() {
|
||||
observer.disconnect();
|
||||
// Si no se lleno, permitir reintento
|
||||
var status = ins.getAttribute('data-ad-status');
|
||||
if (status !== 'filled') {
|
||||
triggered = false;
|
||||
}
|
||||
}, 5000);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user