javascript - JavaScript 函数检测会话期间设置的 cookie,但在新会话开始时检测不到预先存在的 cookie
问题描述
函数调用cookieExists('stylesheet')
应该检测 cookie 的存在,如果名为 'stylesheet' 的 cookie 存在则返回 true,否则返回 false。
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;
}
此功能旨在检查所有现有 cookie 的名称,但我在一个只有一个 cookie 的页面上使用它 - 它的名称是“样式表”。我在页面加载时调用它来检查名为“样式表”的 cookie 是否存在。此 cookie 指定上次使用的 CSS 文件(用户可以选择任一样式表):样式表 1.css 或样式表 2.css。如果存在名为“样式表”的 cookie,我想使用 cookie 中指定的样式表来显示页面。
现在,如果实际上没有名为“样式表”的现有 cookie,cookieExists('stylesheet')
则返回 false。如果我随后向页面添加一个名为“样式表”的 cookie,则cookieExists('stylesheet')
返回 true。到目前为止,一切都很好。
但是,如果我随后关闭浏览器选项卡——虽然页面上附加了名为“样式表”的 cookie——然后在新选项卡中打开同一页面,则cookieExists('stylesheet')
不再检测到 cookie 并返回 false!cookie 仍然附加到页面 - 在上一个会话结束时它还没有过期。
需要明确的是,我cookieExists('stylesheet')
在 pageload 上调用window.onload = findStylesheet;
,函数findStylesheet()
调用的地方cookieExists('stylesheet')
:
function findStylesheet() {
let savedStylesheet = cookieExists('stylesheet');
if (savedStylesheet) {
let setStylesheet = Cookies.get('stylesheet');
let newStylesheet = document.getElementById("stylesheet");
newStylesheet.setAttribute('href', setStylesheet);
}
}
函数Cookies.get('stylesheet')
就是js-cookie
函数。
如果有人能指出我哪里出错了,我将不胜感激。
解决方案
已解决 - 我一直在离线工作。当我将相关页面放到网上时,一切正常。所以我在那里学到了一些东西。
对我来说有趣的是 cookie 在 Firefox 下离线“工作”。我可以设置、更新和读取 cookie。我只是无法在新会话开始时读取上一个会话中存在的 cookie。但是,对于 Chrome,没有任何效果。
感谢 Alias C 的想法。
推荐阅读
- go - 在 Travis 上使用更新的 Go 构建 CGO
- php - 由于 JSON 中的错误,使用 sendgrid 使用 PHP 发送邮件失败
- asp.net-core - HTTP 错误 500.30(Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException:系统找不到指定的文件。)
- javascript - 使用函数返回对象属性的键?
- oracle-apex - 成功验证后也收到错误消息,但它在 oracle apex 中的处理
- sql - 尝试使用 SQL 创建表时标识符无效
- asp.net-mvc - 使用外部 configSource 将连接字符串替换为 Web.Release.config
- java - Visual Studio Code 显示“需要 Java 11 或更高版本才能运行。请下载并安装最新的 JDK”
- assembly - 在 x86-64 中,pcmpestri 指令在 RAX 和 RDX 中以字符为单位还是以字节为单位获取其长度参数?
- python - 在 GAE + python + Flask 中检索 URL 路径时出错