如何通过 JavaScript 检测用户是否已访问过首页并跳过欢迎页

发布时间 - 2026-01-23 00:00:00    点击率:

利用 `localstorage` 在首次访问时记录状态,后续加载页面时自动跳过 logo 欢迎屏,实现更流畅的用户体验。无需服务端参与,兼容现代浏览器。

在单页式首页设计中(如带 Logo 入口屏 + 主内容区的两段式布局),用户每次点击导航栏中的“首页”链接都会重新加载 index.html,导致默认回到入口屏——这违背了“已访问即熟悉”的直觉体验。CSS 的 :visited 伪类无法被 JavaScript 读取(出于隐私限制),因此不能用于判断用户是否访问过某个链接;但我们可以用更可靠的方式:持久化记录用户访问状态

✅ 推荐方案:使用 localStorage

localStorage 是浏览器提供的客户端存储机制,数据长期保存(除非手动清除),且同源页面可共享。我们只需在用户首次完成“进入”操作后写入标记,并在页面加载时检查该标记:

// 页面加载时检查是否已“进入”过
document.addEventListener('DOMContentLoaded', function() {
  const hasEntered = localStorage.getItem('hasEnteredHomepage');

  if (hasEntered === 'true') {
    // 直接显示主内容,隐藏入口屏
    document.getElementById('entry-screen').style.display = 'none';
    document.getElementById('main-content').style.display = 'block';
  } else {
    // 显示入口屏(默认状态)
    document.getElementById('entry-screen').style.display = 'block';
    document.getElementById('main-content').style.display = 'none';
  }
});

// “Enter”按钮点击事件
document.getElementById('enter-btn').addEventListener('click', function() {
  localStorage.setItem('hasEnteredHomepage', 'true');
  document.getElementById('entry-screen').style.display = 'none';
  document.getElementById('main-content').style.display = 'block';
});
? HTML 结构示意

(需确保 ID 匹配): Company Logo Enter

⚠️ 注意事项

  • localStorage 值为字符串类型,建议统一使用 'true' / 'false' 字面量,避免 JSON.parse() 或布尔转换陷阱;
  • 若需支持多设备/多用户场景(如公共电脑),应结合登录态或提供“退出重进”按钮并调用 localStorage.removeItem('hasEnteredHomepage');
  • Safari 在无痕模式下可能禁用 localStorage,可添加 try-catch 并降级为内存标记(仅当前会话有效);
  • 不要依赖 document.referrer 或 URL 参数模拟,它们易被篡改且不可靠。

✅ 总结

:visited 是纯样式伪类,JavaScript 无法读取其状态——这是浏览器刻意设计的隐私保护机制。真正可行的解法是主动管理用户状态:用 localStorage 标记“已进入”,实现跨会话的智能首屏跳转。简洁、安全、零后端依赖,是现代前端欢迎页体验优化的标准实践。


# css  # javascript  # java  # html  # js  # 前端  # json  # go  # 浏览器  # 电脑  # safari  # 后端  # ai 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微信小程序 require机制详解及实例代码  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  昵图网官网入口 昵图网素材平台官方入口  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  原生JS实现图片轮播切换效果  如何注册花生壳免费域名并搭建个人网站?  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  如何快速搭建高效WAP手机网站吸引移动用户?  linux top下的 minerd 木马清除方法  如何用狗爹虚拟主机快速搭建网站?  微信h5制作网站有哪些,免费微信H5页面制作工具?  Laravel如何处理表单验证?(Requests代码示例)  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  如何用wdcp快速搭建高效网站?  JavaScript实现Fly Bird小游戏  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  在线制作视频的网站有哪些,电脑如何制作视频短片?  node.js报错:Cannot find module 'ejs'的解决办法  Python正则表达式进阶教程_复杂匹配与分组替换解析  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  JavaScript如何操作视频_媒体API怎么控制播放  如何安全更换建站之星模板并保留数据?  EditPlus中的正则表达式 实战(1)  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  如何用腾讯建站主机快速创建免费网站?  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  如何快速搭建高效香港服务器网站?  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  如何确保西部建站助手FTP传输的安全性?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  Laravel如何使用Blade模板引擎?(完整语法和示例)  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  怎么用AI帮你为初创公司进行市场定位分析?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  浅谈redis在项目中的应用