news 2026/5/22 20:42:16

JavaScript BOM 完全指南:掌控浏览器窗口的编程接口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaScript BOM 完全指南:掌控浏览器窗口的编程接口

        BOM(Browser Object Model,浏览器对象模型)是 JavaScript 与浏览器交互的核心 API 集合。它提供了操作浏览器窗口、标签页、历史记录、导航栏、屏幕信息等能力,让开发者能够控制浏览器的行为,而不仅仅是操作网页文档(DOM)。与 DOM(文档对象模型)不同,BOM 没有统一的官方标准,但各主流浏览器实现了事实上的兼容集,主要包括windownavigatorscreenhistorylocation等对象。本文将从实用角度全面解析 BOM 的各个组成部分及其应用场景。


一、BOM 的核心:window 对象

window是 BOM 的顶层对象,代表浏览器窗口或标签页。在浏览器中,window既是全局对象(所有声明的全局变量和函数都是它的属性),又是 JavaScript 代码运行的顶级环境。

1.1 窗口尺寸与滚动

// 获取视口尺寸(不含滚动条) const viewportWidth = window.innerWidth; const viewportHeight = window.innerHeight; // 获取浏览器窗口外部尺寸(包含工具栏、滚动条等) const outerWidth = window.outerWidth; const outerHeight = window.outerHeight; // 滚动窗口 window.scrollTo(0, 100); // 滚动到 (100px, 100px) window.scrollTo({ top: 100, behavior: 'smooth' }); // 平滑滚动 window.scrollBy(0, 50); // 相对当前位置向下滚动 50px // 获取滚动距离 const scrollX = window.scrollX || window.pageXOffset; const scrollY = window.scrollY || window.pageYOffset;

1.2 对话框:alert、confirm、prompt

// 警告框(阻塞,仅显示信息) alert('操作成功'); // 确认框(返回布尔值) const isConfirmed = confirm('确定删除该项吗?'); if (isConfirmed) { /* 执行删除 */ } // 输入框(返回输入的字符串或 null) const userName = prompt('请输入您的姓名', '默认值'); if (userName !== null) console.log(`你好,${userName}`);

注意:这些对话框会阻塞主线程,影响用户体验,除简单调试外,生产环境建议使用自定义模态框。

1.3 计时器:setTimeout 与 setInterval

// 延迟执行(单次) const timeoutId = setTimeout(() => { console.log('3 秒后执行'); }, 3000); clearTimeout(timeoutId); // 取消 // 周期执行(重复) let count = 0; const intervalId = setInterval(() => { console.log(`第 ${++count} 次执行`); if (count === 5) clearInterval(intervalId); }, 1000);

最佳实践:使用requestAnimationFrame代替setInterval做动画;避免在计时器中执行耗时任务。

1.4 窗口操作:打开、关闭、聚焦

// 打开新窗口或标签页 const newWindow = window.open('https://example.com', '_blank', 'width=800,height=600'); // _blank: 新标签页; _self: 当前页; _parent: 父框架; _top: 顶层框架 // 关闭当前窗口(仅对通过脚本打开的窗口有效) window.close(); // 聚焦/失焦 window.focus(); window.blur(); // 移动/调整窗口(受浏览器安全策略限制,通常仅对弹出窗口有效) window.moveTo(100, 100); window.resizeTo(800, 600);

1.5 页面生命周期事件

// DOM 加载完成(无需等待图片等资源) window.addEventListener('DOMContentLoaded', () => { console.log('DOM 就绪,可以安全操作 DOM'); }); // 页面完全加载(包括所有资源) window.addEventListener('load', () => { console.log('所有资源加载完成'); }); // 页面卸载前(常用于提示用户保存未保存的更改) window.addEventListener('beforeunload', (event) => { event.preventDefault(); // 大多数浏览器需要 preventDefault 才能显示提示 event.returnValue = ''; // 兼容旧浏览器 }); // 页面关闭/卸载时 window.addEventListener('unload', () => { // 此处的异步请求可能不可靠,建议使用 sendBeacon navigator.sendBeacon('/log', data); });
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 20:41:51

面试:怎么设计客服 Agent对话状态机的?

面试:怎么设计客服 Agent对话状态机的? 这个问题问得好,我结合我们当时的设计思路具体讲讲。 对话状态机的核心设计思路 客服场景的状态机和其他业务系统不太一样——它既要处理业务状态(订单走到哪一步了),又要处理对话状态(用户在哪个节点、槽位填了多少),还得处理…

作者头像 李华
网站建设 2026/5/22 20:41:11

AI开发效率翻倍!5个工具替代重复劳动!

谁懂啊!做AI开发天天陷在写重复代码、调参改bug里,明明核心逻辑不难,却被杂活耗掉80%时间😭 试了几十款工具后,精选出这5个「效率王者」,覆盖全开发流程,新手10分钟就能上手,直接把工…

作者头像 李华
网站建设 2026/5/22 20:38:03

2026高性价比AE音乐素材网站TOP5评测,全场景低成本创作必备

一、引言2026年AE后期创作门槛持续降低,个人自媒体、小微企业、兼职创作者数量大幅增长,低成本、高合规、高适配的ae音乐素材成为市场主流需求。据2026年行业数据显示,全网30万合规AE音乐素材中,高性价比、灵活付费的素材占比不足…

作者头像 李华
网站建设 2026/5/22 20:35:02

对图片识别结果进行诊断分析

在对图片进行模板匹配后,我们需要直观地看到识别结果,以便于对代码继续优化。整体的流程如下:diagnose()├── 1. 加载模板├── 2. 检查模板质量├── 3. 读取截图├── 4. 检测英雄框├── 5. 对第一个英雄框做详细匹配分析│ ├…

作者头像 李华
网站建设 2026/5/22 20:27:30

2026年TOP5运营多年口碑平稳的金价查询app有哪些

前几天跟闺蜜约饭,她一坐下来就疯狂吐槽:前一周特意蹲了网上说的金价合适的时段,攒了好久的钱想去买那条种草了半年的金项链,结果到了线下门店才知道,当天大盘价已经涨了21块钱,比她查的那个三天没更新的小…

作者头像 李华