fix: éviter les rechargements en boucle causés par le hot-reload

- Ajout de protections contre les exécutions multiples de initStrategyLinks()
- Protection globale avec window.__strategieScriptLoaded pour éviter la réexécution du script
- Vérification dans addLinksToHeader() pour éviter d'ajouter les liens plusieurs fois
- Gestion correcte du flag isInitialized lors des retours au radar
- Cela devrait résoudre les problèmes de Fast Refresh qui causent des rechargements en boucle
This commit is contained in:
syoul
2025-12-03 15:27:18 +01:00
parent 89865cbba5
commit 3c3e984655

View File

@@ -706,7 +706,23 @@ Interface de pilotage pour les responsables sécurité des PME.
return html; return html;
} }
// Protection contre les exécutions multiples
let isInitialized = false;
let initTimeout = null;
function initStrategyLinks() { function initStrategyLinks() {
// Éviter les exécutions multiples
if (isInitialized) return;
// Annuler toute tentative d'initialisation en cours
if (initTimeout) {
clearTimeout(initTimeout);
initTimeout = null;
}
// Marquer comme initialisé immédiatement
isInitialized = true;
addLinksToHeader(); addLinksToHeader();
handleRoute(); handleRoute();
} }
@@ -764,7 +780,10 @@ Interface de pilotage pour les responsables sécurité des PME.
if (window.originalBodyContent) { if (window.originalBodyContent) {
document.body.innerHTML = window.originalBodyContent; document.body.innerHTML = window.originalBodyContent;
window.history.pushState(null, null, '/'); window.history.pushState(null, null, '/');
setTimeout(initStrategyLinks, 100); // Réinitialiser le flag pour permettre la réinitialisation
isInitialized = false;
if (initTimeout) clearTimeout(initTimeout);
initTimeout = setTimeout(initStrategyLinks, 100);
} else { } else {
window.location.href = '/'; window.location.href = '/';
} }
@@ -817,6 +836,11 @@ Interface de pilotage pour les responsables sécurité des PME.
} }
function addLinksToHeader() { function addLinksToHeader() {
// Protection : vérifier si les liens existent déjà
if (document.querySelector('.custom-nav-link')) {
return; // Déjà initialisé, ne pas réexécuter
}
// Chercher le header // Chercher le header
const header = document.querySelector('header') || const header = document.querySelector('header') ||
document.querySelector('nav') || document.querySelector('nav') ||
@@ -873,12 +897,21 @@ Interface de pilotage pour les responsables sécurité des PME.
showPage(event.state.page); showPage(event.state.page);
} else if (window.originalBodyContent) { } else if (window.originalBodyContent) {
document.body.innerHTML = window.originalBodyContent; document.body.innerHTML = window.originalBodyContent;
setTimeout(initStrategyLinks, 100); // Réinitialiser le flag pour permettre la réinitialisation
isInitialized = false;
if (initTimeout) clearTimeout(initTimeout);
initTimeout = setTimeout(initStrategyLinks, 100);
} }
}); });
// --- EXÉCUTION AU CHARGEMENT DE LA PAGE --- // --- EXÉCUTION AU CHARGEMENT DE LA PAGE ---
// Déplacé à la fin pour s'assurer que toutes les fonctions et variables sont définies // Déplacé à la fin pour s'assurer que toutes les fonctions et variables sont définies
// Protection globale contre les exécutions multiples
if (window.__strategieScriptLoaded) {
return; // Script déjà chargé, ne pas réexécuter
}
window.__strategieScriptLoaded = true;
if (document.readyState === 'loading') { if (document.readyState === 'loading') {
// Bloquer le rendu visuel immédiat si possible // Bloquer le rendu visuel immédiat si possible
document.documentElement.style.display = 'none'; document.documentElement.style.display = 'none';