fix: MutationObserver pour détecter header + amélioration robustesse
- Utilisation de MutationObserver pour détecter quand le header est ajouté au DOM - Timeout de sécurité après 5 secondes - Amélioration de la logique d'initialisation pour éviter les exécutions multiples - Logs détaillés pour diagnostic
This commit is contained in:
@@ -980,41 +980,70 @@ Interface de pilotage pour les responsables sécurité des PME.
|
|||||||
window.__strategieScriptLoaded = true;
|
window.__strategieScriptLoaded = true;
|
||||||
|
|
||||||
// Éviter de modifier document.documentElement qui peut déclencher des rechargements Fast Refresh
|
// Éviter de modifier document.documentElement qui peut déclencher des rechargements Fast Refresh
|
||||||
// Attendre que le DOM soit complètement chargé, y compris le header
|
// Utiliser MutationObserver pour détecter quand le header est ajouté
|
||||||
function initWhenReady() {
|
function waitForHeaderAndInit() {
|
||||||
// Vérifier si le header existe, sinon attendre un peu
|
|
||||||
const header = document.querySelector('header') ||
|
const header = document.querySelector('header') ||
|
||||||
document.querySelector('nav') ||
|
document.querySelector('nav') ||
|
||||||
document.querySelector('div[role="banner"]');
|
document.querySelector('div[role="banner"]');
|
||||||
|
|
||||||
console.log('🔍 initWhenReady - header trouvé:', !!header, 'body:', !!document.body);
|
if (header) {
|
||||||
|
console.log('✅ Header trouvé, initialisation...');
|
||||||
if (header || document.body) {
|
|
||||||
checkAuth();
|
checkAuth();
|
||||||
// Délai pour s'assurer que le header est complètement rendu
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
console.log('🚀 Initialisation des liens de navigation...');
|
|
||||||
initStrategyLinks();
|
initStrategyLinks();
|
||||||
}, 200);
|
}, 300);
|
||||||
} else {
|
return true;
|
||||||
// Réessayer après un court délai (max 10 tentatives = 500ms)
|
|
||||||
if (typeof initWhenReady.attempts === 'undefined') {
|
|
||||||
initWhenReady.attempts = 0;
|
|
||||||
}
|
}
|
||||||
initWhenReady.attempts++;
|
return false;
|
||||||
if (initWhenReady.attempts < 10) {
|
|
||||||
setTimeout(initWhenReady, 50);
|
|
||||||
} else {
|
|
||||||
console.warn('⚠️ Header non trouvé après 10 tentatives, initialisation quand même');
|
|
||||||
checkAuth();
|
|
||||||
initStrategyLinks();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Essayer immédiatement
|
||||||
|
if (waitForHeaderAndInit()) {
|
||||||
|
// Déjà trouvé, c'est bon
|
||||||
|
} else {
|
||||||
|
// Utiliser MutationObserver pour détecter l'ajout du header
|
||||||
|
const observer = new MutationObserver((mutations, obs) => {
|
||||||
|
if (waitForHeaderAndInit()) {
|
||||||
|
obs.disconnect();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Observer les changements dans le body
|
||||||
|
if (document.body) {
|
||||||
|
observer.observe(document.body, {
|
||||||
|
childList: true,
|
||||||
|
subtree: true
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Attendre que le body soit disponible
|
||||||
|
if (document.readyState === 'loading') {
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
observer.observe(document.body, {
|
||||||
|
childList: true,
|
||||||
|
subtree: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Body déjà là mais pas de header, observer quand même
|
||||||
|
setTimeout(() => {
|
||||||
|
if (document.body) {
|
||||||
|
observer.observe(document.body, {
|
||||||
|
childList: true,
|
||||||
|
subtree: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (document.readyState === 'loading') {
|
// Timeout de sécurité après 5 secondes
|
||||||
document.addEventListener('DOMContentLoaded', initWhenReady);
|
setTimeout(() => {
|
||||||
} else {
|
observer.disconnect();
|
||||||
initWhenReady();
|
if (!document.getElementById('link-team')) {
|
||||||
|
console.warn('⚠️ Timeout: initialisation forcée après 5 secondes');
|
||||||
|
checkAuth();
|
||||||
|
initStrategyLinks();
|
||||||
|
}
|
||||||
|
}, 5000);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|||||||
Reference in New Issue
Block a user