编写Cookie存储Prompt输入脚本异常:生成cookie_date而非预期内容
问题分析与修复
你的代码存在三个核心问题,导致未弹出Prompt且生成异常Cookie:
Cookie设置格式错误:
直接将Prompt输入赋值给document.cookie不符合Cookie的标准格式(必须是key=value),浏览器会对这种不规范的赋值做异常处理,这就是你看到"cookie_date"这类奇怪Cookie的原因。Cookie存在性判断逻辑错误:
用document.cookie === ""判断是否需要弹出Prompt是错误的——只要页面存在任何其他Cookie,这个条件就不成立,直接跳过Prompt逻辑。我们应该检查**我们需要的特定Cookie(比如username)**是否存在,而非全局Cookie是否为空。Cookie值获取错误:
document.cookie返回的是所有Cookie的拼接字符串(格式如"key1=value1; key2=value2"),直接赋值给person无法拿到我们需要的单个输入值,后续的判断逻辑自然失效。
修正后的代码
window.addEventListener("DOMContentLoaded", () => { // 从Cookie中获取指定键的值 function getCookie(name) { const value = `; ${document.cookie}`; const parts = value.split(`; ${name}=`); if (parts.length === 2) return parts.pop().split(';').shift(); } let person = getCookie("username"); // 如果没有username Cookie,弹出Prompt并设置Cookie if (!person) { person = prompt("Please enter your name", ""); if (person) { // 设置标准格式的Cookie,可添加过期时间等参数 document.cookie = `username=${encodeURIComponent(person)}; path=/`; } } if (!person) return; const text = person.toLowerCase() === "pyro" ? "hey, me! hope you've been making substantial changes!" : `welcome, ${person}, to the pyrogaming/covid2009 homepage! <br> did you know you can drag the fake windows around?`; document.getElementById("name").innerHTML = text; });
关键修复说明
- 添加了
getCookie函数,专门提取指定键的Cookie值,避免直接操作全局Cookie字符串。 - 改为检查
usernameCookie是否存在,确保只有当我们需要的Cookie不存在时才弹出Prompt。 - 设置Cookie时使用标准格式
username=值,并通过encodeURIComponent处理特殊字符,同时指定path=/确保Cookie在全站生效。 - 增加了对Prompt取消操作的判断(用户点击取消时
person为null,不设置Cookie)。
内容的提问来源于stack exchange,提问作者Pyro Gaming
相关产品推荐
相关产品推荐

