From 79627ec10492fac8141e6cc252558dd754b3f596 Mon Sep 17 00:00:00 2001 From: webmanager Date: Sat, 7 Nov 2026 17:25:17 +0000 Subject: [PATCH] FAQ: el selector de idioma tolera localStorage bloqueado MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Si el navegador bloquea localStorage (modo privado), el script moría al iniciar y ningún botón respondía. Ahora el almacenamiento va con try/catch y el click se delega al contenedor. --- faq/index.html | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/faq/index.html b/faq/index.html index acd2197..168b827 100644 --- a/faq/index.html +++ b/faq/index.html @@ -98,8 +98,15 @@ const I18N = { } }; +function store(key, val) { + try { localStorage.setItem(key, val); } catch (e) { /* private mode / blocked storage */ } +} +function stored(key) { + try { return localStorage.getItem(key); } catch (e) { return null; } +} + const state = { - lang: (localStorage.getItem('ocaFaqLang') || (navigator.language || 'es').slice(0, 2)) === 'en' ? 'en' : 'es', + lang: ((stored('ocaFaqLang') || (navigator.language || 'es').slice(0, 2)) === 'en') ? 'en' : 'es', items: [], }; @@ -220,13 +227,16 @@ async function load() { } } -document.querySelectorAll('.lang button').forEach(b => { - b.onclick = () => { +const langBox = document.querySelector('.lang'); +if (langBox) { + langBox.addEventListener('click', (ev) => { + const b = ev.target.closest('button[data-lang]'); + if (!b) return; state.lang = b.dataset.lang; - localStorage.setItem('ocaFaqLang', state.lang); + store('ocaFaqLang', state.lang); applyLang(); - }; -}); + }); +} el('q').addEventListener('input', render); applyLang();