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:
syoul
2025-12-06 22:12:40 +01:00
parent a967840079
commit 02a23a09ee

View File

@@ -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') { return false;
initWhenReady.attempts = 0; }
// 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 { } 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(); checkAuth();
initStrategyLinks(); initStrategyLinks();
} }
} }, 5000);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initWhenReady);
} else {
initWhenReady();
} }
})(); })();