FAQ: el selector de idioma tolera localStorage bloqueado
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.
This commit is contained in:
1 parent
726052fa37
commit
79627ec104
1 file changed
+16
-6
+16
-6
@@ -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 = {
|
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: [],
|
items: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -220,13 +227,16 @@ async function load() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
document.querySelectorAll('.lang button').forEach(b => {
|
const langBox = document.querySelector('.lang');
|
||||||
b.onclick = () => {
|
if (langBox) {
|
||||||
|
langBox.addEventListener('click', (ev) => {
|
||||||
|
const b = ev.target.closest('button[data-lang]');
|
||||||
|
if (!b) return;
|
||||||
state.lang = b.dataset.lang;
|
state.lang = b.dataset.lang;
|
||||||
localStorage.setItem('ocaFaqLang', state.lang);
|
store('ocaFaqLang', state.lang);
|
||||||
applyLang();
|
applyLang();
|
||||||
};
|
});
|
||||||
});
|
}
|
||||||
el('q').addEventListener('input', render);
|
el('q').addEventListener('input', render);
|
||||||
|
|
||||||
applyLang();
|
applyLang();
|
||||||
|
|||||||
Reference in new issue
Block a user