La llamada a la función cookieExists('stylesheet')
debería detectar la presencia de una cookie, devolviendo verdadero si la cookie llamada 'stylesheet' está presente y falso si no.
function cookieExists(name) { var ckArr = document.cookie.split(';'); for(i = 0; i < ckArr.length; i++) if (ckArr[i].split('=')[0].trim() == name) return true; else return false; }
Esta función está diseñada para verificar los nombres de todas las cookies existentes, pero la estoy usando en una página que solo tendrá una cookie, y su nombre es 'hoja de estilo'. Lo llamo en la carga de la página para verificar si existe la cookie llamada 'hoja de estilo'. Esta cookie especifica el último archivo CSS utilizado (los usuarios pueden elegir cualquier hoja de estilo): ya sea stylesheet1.css o stylesheet2.css. Si existe la cookie llamada 'hoja de estilo', quiero usar la hoja de estilo especificada en la cookie para mostrar la página.
Ahora, si en realidad no existe una cookie llamada 'hoja de estilo', cookieExists('stylesheet')
devuelve falso. Si luego agrego una cookie llamada 'hoja de estilo' a la página, cookieExists('stylesheet')
devuelve verdadero. Hasta aquí todo bien.
Sin embargo, si luego cierro la pestaña del navegador, mientras que la cookie llamada 'hoja de estilo' está adjunta a la página, y luego abro la misma página en una nueva pestaña, cookieExists('stylesheet')
ya no detecta la cookie y devuelve falso! La cookie todavía está adjunta a la página; no ha caducado al final de la sesión anterior.
Para ser claros, estoy llamando a cookieExists('stylesheet')
en la carga de la página con window.onload = findStylesheet;
, donde la función findStylesheet()
llama a cookieExists('stylesheet')
:
function findStylesheet() { let savedStylesheet = cookieExists('stylesheet'); if (savedStylesheet) { let setStylesheet = Cookies.get('stylesheet'); let newStylesheet = document.getElementById("stylesheet"); newStylesheet.setAttribute('href', setStylesheet); } }
La función Cookies.get('stylesheet')
es una función js-cookie
.
Estaría muy agradecido si alguien pudiera señalar dónde me estoy equivocando.
SOLUCIONADO - Estuve trabajando sin conexión. Cuando puse las páginas en cuestión en línea, todo funcionó. Así que aprendí algo allí.
Lo que es interesante para mí es que las cookies 'funcionaron' sin conexión con Firefox. Podría configurar, actualizar y leer cookies. Simplemente no pude leer una cookie que existía de una sesión anterior al comienzo de una nueva sesión. Sin embargo, con Chrome, nada funcionó.
Gracias a Alias C por sus ideas.
¿Intentó agregar un atributo de caducidad a su Cookies.set()
? Después de probar con su código, creo que puede ser un problema, el otro es que su función cookieExists no funcionó para una cookie que fue encontrada por mi otro código, por lo que puede ser otro problema. Cambié la función findStylesheet a esto:
function findStylesheet() { let savedStylesheet = Cookies.get('stylesheet'); if (savedStylesheet) { let newStylesheet = document.getElementById("stylesheet"); newStylesheet.setAttribute('href', setStylesheet); return true; } return false; }
También utilicé un método de prueba para verificar la cookie: Cookies.set('stylesheet', 'path-to-stylesheet',{ expires: 365 });
(Tenga en cuenta que expira entre paréntesis). Este código funcionó para mí y cuando cerré y abrí el navegador, la cookie todavía estaba allí, sin embargo, la cookie no se encuentra si omito la fecha de caducidad.