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';