当前位置: 首页 > news >正文

【Java Web学习 | 第11篇】JavaScript(5)BOM

【Java Web学习 | 第11篇】JavaScript(5) - BOM(浏览器对象模型)(2026最新版)

恭喜你完成对象部分!
现在进入BOM(Browser Object Model,浏览器对象模型),这是 JavaScript 与浏览器交互的核心桥梁。

BOM 让 JS 可以操作浏览器窗口、历史记录、地址栏、定时器、弹窗等功能。在 Java Web 项目中,BOM 常用于:

  • 页面跳转与刷新
  • 定时刷新数据(轮询后端 API)
  • 确认/提示弹窗
  • 获取浏览器信息(设备适配)
  • localStorage/sessionStorage(前端缓存)

注意:BOM没有统一标准,但主流浏览器(Chrome、Edge、Firefox 等)实现高度一致。

1. BOM 核心层级结构

window(全局对象,所有 BOM 的根) ├── location(地址栏) ├── history(浏览历史) ├── navigator(浏览器信息) ├── screen(屏幕信息) ├── document(DOM 的入口,已学) ├── console(控制台) ├── alert/confirm/prompt(弹窗) ├── setTimeout/setInterval(定时器) └── localStorage/sessionStorage(本地存储)

2. window 对象(全局对象)

// window 可以省略不写window.alert("欢迎学习 Java Web");alert("欢迎学习 Java Web");// 直接写即可// 常用属性console.log(window.innerWidth);// 浏览器窗口宽度(不含滚动条)console.log(window.innerHeight);// 浏览器窗口高度// 打开新窗口functionopenNewPage(){window.open("https://www.baidu.com","_blank");}

3. location 对象(地址栏操作)

// 当前页面完整 URLconsole.log(location.href);// 常用属性console.log(location.protocol);// "https:"console.log(location.host);// "example.com:8080"console.log(location.pathname);// "/user/list"console.log(location.search);// "?id=1001&name=zhangsan"// 重要方法location.href="https://www.example.com";// 跳转页面(推荐)location.assign("https://www.example.com");// 同上location.replace("https://www.example.com");// 跳转且不记录历史(无法后退)// 刷新页面location.reload();// 普通刷新location.reload(true);// 强制从服务器重新加载(清除缓存)

4. history 对象(浏览器历史记录)

// 后退history.back();// 等同于点击浏览器后退按钮history.go(-1);// 前进history.forward();history.go(1);// 向历史记录中添加一条(常用于 SPA 单页应用)history.pushState({page:2},"标题","/user/list");// 替换当前历史记录history.replaceState({page:1},"标题","/dashboard");

5. navigator 对象(浏览器与设备信息)

console.log(navigator.userAgent);// 浏览器完整 UA 字符串// 常用判断(2026 仍实用)constisMobile=/Mobi|Android|iPhone/i.test(navigator.userAgent);console.log("是否移动端:",isMobile);console.log(navigator.language);// "zh-CN"console.log(navigator.onLine);// 是否联网

6. 定时器(Timer)—— Java Web 中非常重要!

// 1. setTimeout(一次性定时器)consttimer1=setTimeout(()=>{console.log("3秒后执行");// 可以在这里调用后端 API 刷新数据},3000);// 取消定时器clearTimeout(timer1);// 2. setInterval(重复定时器,常用于轮询)letcount=0;constintervalId=setInterval(()=>{count++;console.log(`${count}次执行`);// 实际项目中常用于:每30秒刷新一次用户列表if(count>=10){clearInterval(intervalId);// 停止}},1000);

实战建议:在生产环境中,轮询推荐使用setTimeout递归实现,避免setInterval累积延迟。

7. 弹窗方法(谨慎使用)

alert("普通提示框");// 只确定按钮constresult=confirm("确认删除此用户吗?");// 确认框if(result){// 执行删除操作,调用后端 APIconsole.log("用户确认删除");}constname=prompt("请输入你的姓名:","重阳");// 输入框if(name){console.log("输入的内容:",name);}

注意:现代项目中alert/confirm/prompt使用较少,通常用自定义模态框(Modal)替代,UI 更好看。

8. 本地存储(Storage)—— 前端数据持久化

// 1. localStorage(永久存储,关闭浏览器仍存在)localStorage.setItem("token","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...");localStorage.setItem("user",JSON.stringify({id:1001,username:"chongyang"}));// 获取consttoken=localStorage.getItem("token");constuser=JSON.parse(localStorage.getItem("user")||"{}");// 删除localStorage.removeItem("token");localStorage.clear();// 清空所有// 2. sessionStorage(会话存储,关闭标签页即消失)sessionStorage.setItem("tempData","临时数据");

Java Web 实战:登录成功后把 JWT token 存入 localStorage,后续请求自动带上 Authorization 头。

9. 完整综合示例(BOM 实战)

<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><title>BOM 综合示例 - Java Web</title></head><body><h1>Java Web BOM 演示</h1><buttononclick="refreshPage()">刷新页面</button><buttononclick="goToBackend()">跳转到后端首页</button><buttononclick="startPolling()">开始轮询(模拟刷新数据)</button><buttononclick="saveToken()">保存登录Token</button><divid="log"></div><script>constlog=document.getElementById('log');functionlogMsg(msg){log.innerHTML+=`<p>${newDate().toLocaleTimeString()}-${msg}</p>`;}window.refreshPage=()=>location.reload();window.goToBackend=()=>location.href="/api/index";// 假设后端路径letpollCount=0;letpollTimer=null;window.startPolling=()=>{if(pollTimer)clearInterval(pollTimer);pollTimer=setInterval(()=>{pollCount++;logMsg(`${pollCount}次轮询后端数据...`);// 实际项目中这里会调用 fetch('/api/users')},3000);};window.saveToken=()=>{localStorage.setItem("jwt_token","fake-jwt-token-2026");logMsg("Token 已保存到 localStorage");};// 页面加载时输出 BOM 信息window.onload=()=>{logMsg(`浏览器窗口大小:${window.innerWidth}×${window.innerHeight}`);logMsg(`当前页面路径:${location.pathname}`);};</script></body></html>

10. 小练习(建议立即完成)

  1. 写一个按钮,点击后弹出confirm确认框,确认后跳转到百度首页。
  2. 使用setInterval每 2 秒在页面上显示当前时间(实时更新)。
  3. 实现“保存用户偏好”功能:把主题颜色存入 localStorage,页面刷新后自动应用。
  4. 写一个函数checkLogin(),如果 localStorage 中没有 token,则 alert 提示用户登录。

下一篇文章预告:《【Java Web学习 | 第12篇】JavaScript(6) - 异步编程(Promise + async/await)与 Fetch API》

我们将学习现代异步处理方式,并使用fetch真正调用 Spring Boot 后端 REST 接口,实现登录、获取用户列表等功能。


本篇核心总结

  • BOM 以window为根
  • 跳转用location.href
  • 定时任务用setTimeout/setInterval
  • 数据持久化用localStorage
  • 实际项目中弹窗尽量用自定义 UI 替代

有问题随时问:

  • 想要完整登录态管理示例(token + localStorage)?
  • 需要轮询刷新数据完整代码
  • 或直接进入异步 + Fetch篇?

回复“给我练习答案”或“下一篇 Fetch”,我立刻继续!

BOM 是浏览器与 JS 交互的“控制中心”,掌握后你已经可以控制整个浏览器行为。继续加油,下一章我们就要真正和 Spring Boot 后端“握手”了!🚀

http://www.jsqmd.com/news/566627/

相关文章:

  • 开源LoRA模型落地实操:Z-Image-Turbo+孙珍妮风格的Gradio快速调用教程
  • PaddleSpeech TTS初体验:从安装到合成第一句‘你好’,我踩了这些坑
  • 如何快速实现文档智能转换:MarkItDown的完整解决方案
  • RevIN:时间序列预测中的动态归一化利器
  • 数据一致之道:Doris 分布式事务处理与一致性保障全解析
  • DAMO-YOLO智能视觉系统作品集:多场景零售货架检测效果惊艳展示
  • 从开关电源到电平转换:手把手教你玩转PMOS与NMOS的选型与实战电路
  • 如何快速使用ER存档编辑器:艾尔登法环存档修改完整指南
  • Windows右键菜单文件转换终极指南:告别格式转换烦恼的完整解决方案
  • 1小时速成LangGraph:手把手教你构建智能AI Agent,秒变大牛!
  • 【MySQL】16.MySQL事务管理新(2)
  • 游戏多开检测技术深度解析与实战绕过方案
  • 2026指纹浏览器排名前十名,指纹浏览器推荐! - Roxy指纹浏览器
  • Parallel Hashmap BTree容器详解:替代std::map的终极方案
  • 2026年等静压设备源头厂家推荐,自增强/超高压反应釜/作动筒性能测试/深海设备水压测试,等静压设备源头厂家哪家好 - 品牌推荐师
  • 2026年市面上除雪设备企业,工程履带运输车/工程履带底盘/运输车/矿用履带底盘/大型除雪设备,除雪设备靠谱供应商如何选 - 品牌推荐师
  • JavaScript电子表格处理:高效驾驭ExcelJS的实战指南
  • Git Diff View:三分钟学会实用的代码差异对比组件
  • HorizonCalendar与Airbnb设计系统的完美融合:打造iOS应用中的顶级日历体验
  • OpenCode高效部署指南:零基础也能实现全平台支持的AI编程工作流
  • 6种字重2种格式:PingFangSC字体全面解析与跨平台应用指南
  • Shiny输入验证终极指南:req、validate与自定义规则完全解析
  • StructBERT文本相似度模型Transformer原理详解与调参实战
  • CSS-in-JS终极指南:5个高级技巧提升代码复用性
  • 告别卡顿!在Linux嵌入式设备上用OpenCV+FFmpeg优化视频处理管道的几个实战技巧
  • MQ2烟雾传感器与STM32的完美搭配:从硬件连接到手机APP显示全流程
  • 手把手教你玩转双闭环MMC逆变仿真
  • Material-Kit-React 设置页面终极优化指南:打造专业用户配置管理系统
  • 3分钟掌握n8n浏览器自动化:无需代码的网页抓取终极方案
  • 程序员转型不迷茫:大模型赛道入门指南(小白/资深开发通用)