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;
|
||||
|
||||
// É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
|
||||
function initWhenReady() {
|
||||
// Vérifier si le header existe, sinon attendre un peu
|
||||
// Utiliser MutationObserver pour détecter quand le header est ajouté
|
||||
function waitForHeaderAndInit() {
|
||||
const header = document.querySelector('header') ||
|
||||
document.querySelector('nav') ||
|
||||
document.querySelector('div[role="banner"]');
|
||||
|
||||
console.log('🔍 initWhenReady - header trouvé:', !!header, 'body:', !!document.body);
|
||||
|
||||
if (header || document.body) {
|
||||
if (header) {
|
||||
console.log('✅ Header trouvé, initialisation...');
|
||||
checkAuth();
|
||||
// Délai pour s'assurer que le header est complètement rendu
|
||||
setTimeout(() => {
|
||||
console.log('🚀 Initialisation des liens de navigation...');
|
||||
initStrategyLinks();
|
||||
}, 200);
|
||||
} else {
|
||||
// Réessayer après un court délai (max 10 tentatives = 500ms)
|
||||
if (typeof initWhenReady.attempts === 'undefined') {
|
||||
initWhenReady.attempts = 0;
|
||||
}, 300);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 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();
|
||||
}
|
||||
initWhenReady.attempts++;
|
||||
if (initWhenReady.attempts < 10) {
|
||||
setTimeout(initWhenReady, 50);
|
||||
});
|
||||
|
||||
// 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 {
|
||||
console.warn('⚠️ Header non trouvé après 10 tentatives, initialisation quand même');
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
// Timeout de sécurité après 5 secondes
|
||||
setTimeout(() => {
|
||||
observer.disconnect();
|
||||
if (!document.getElementById('link-team')) {
|
||||
console.warn('⚠️ Timeout: initialisation forcée après 5 secondes');
|
||||
checkAuth();
|
||||
initStrategyLinks();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', initWhenReady);
|
||||
} else {
|
||||
initWhenReady();
|
||||
}, 5000);
|
||||
}
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user