From 3c3e984655a0105b298721d437a7c645391a93e5 Mon Sep 17 00:00:00 2001 From: syoul Date: Wed, 3 Dec 2025 15:27:18 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20=C3=A9viter=20les=20rechargements=20en?= =?UTF-8?q?=20boucle=20caus=C3=A9s=20par=20le=20hot-reload?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- public/strategie-script.js | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/public/strategie-script.js b/public/strategie-script.js index 70747c0..adb4f0c 100644 --- a/public/strategie-script.js +++ b/public/strategie-script.js @@ -706,7 +706,23 @@ Interface de pilotage pour les responsables sécurité des PME. return html; } + // Protection contre les exécutions multiples + let isInitialized = false; + let initTimeout = null; + 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(); handleRoute(); } @@ -764,7 +780,10 @@ Interface de pilotage pour les responsables sécurité des PME. if (window.originalBodyContent) { document.body.innerHTML = window.originalBodyContent; 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 { window.location.href = '/'; } @@ -817,6 +836,11 @@ Interface de pilotage pour les responsables sécurité des PME. } 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 const header = document.querySelector('header') || document.querySelector('nav') || @@ -873,12 +897,21 @@ Interface de pilotage pour les responsables sécurité des PME. showPage(event.state.page); } else if (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 --- // 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') { // Bloquer le rendu visuel immédiat si possible document.documentElement.style.display = 'none';