JavaScript 浏览器对象模型 BOM
浏览器对象模型(Browser Object Model,BOM)是指一组与浏览器进行交互的 JavaScript 对象。它允许 JavaScript 与浏览器的组件进行交互,比如窗口、文档、历史记录等。BOM 不同于 DOM(文档对象模型),后者专注于处理 HTML 和 XML 文档的结构和内容。下面是五个主要对象:
- window 对象:表示浏览器的一个窗口,是 JavaScript 在浏览器环境中的全局对象。这意味着在全局作用域中定义的变量和函数实际上都是 window 对象的属性和方法。
- location 对象:用于获取或改变当前文档的 URL,允许页面重定向;
- navigator 对象:提供了关于浏览器的一些信息,包括用户代理信息、浏览器版本、用户的语言设置等。
- screen 对象:提供了有关用户屏幕的信息,比如屏幕宽度、高度;
- history 对象:用于访问浏览器的历史记录,可以用于前进、后退操作
window 对象
window 对象是 BOM 的核心,表示浏览器窗口或标签页。window 对象提供了一系列属性和方法:
window 对象属性
- document:对 Document 对象的只读引用,用于访问页面的内容。
- history:对 History 对象的只读引用,用于管理浏览历史。
- innerHeight:返回窗口的文档显示区的高度(以像素为单位)。
- innerWidth:返回窗口的文档显示区的宽度(以像素为单位)。
- location:用于获取或设置窗口的 URL。
- name:设置或返回窗口的名称。
- outerHeight:设置或返回窗口的外部高度(包括工具栏和滚动条等界面元素)。
- outerWidth:设置或返回窗口的外部宽度(包括工具栏和滚动条等界面元素)。
- screenX:返回窗口在屏幕上的水平坐标。
- screenY:返回窗口在屏幕上的垂直坐标。
- navigator:包含大量有关 Web 浏览器的信息,用于检测浏览器及操作系统。
window 方法
- alert(message):显示一个带有指定消息和一个确定按钮的对话框。
- confirm(message):显示一个带有指定消息以及确定和取消按钮的对话框,并返回一个布尔值。
- prompt(message, defaultValue):显示一个带有指定消息、一个文本输入字段以及确定和取消按钮的对话框,并返回用户输入的文本(如果用户点击取消按钮,则返回 null)。
- open(url, windowName[, windowFeatures]):打开一个新的浏览器窗口或标签页,并返回一个新的 Window 对象。
- close():关闭当前窗口。
- setTimeout(function, delay):在指定的延迟(以毫秒为单位)后调用一个函数或计算一个表达式。
- setInterval(function, delay):按照指定的周期(以毫秒为单位)调用一个函数或计算一个表达式。
location 对象
Location 对象是浏览器的一个重要组成部分,它提供了关于当前文档的 URL 的信息并允许你进行 URL 的操作。
Location 对象属性
例子:https://www.csdn.net:8080/cdn/about.html?name=simahe#goods,属性可以取值,也可以设置值。
| 属性名 | 例子 | 描述 | 
|---|---|---|
| href | https://www.csdn.net:8080/cdn/about.html?name=simahe#goods | 完整的 URL | 
| protocol | https | 页面使用的协议。 http 或 https | 
| host | www.csdn.net:8080 | 域名+端口号(如果有) | 
| hostname | www.csdn.net | 不带端口的域名 | 
| port | 8080 | 端口号,没有返回空字符串 | 
| pathname | cdn | URL 的目录或文件名 | 
| search | ?name=simahe | URL 查询字符串,“?”开头 | 
| hash | #goods | 返回 URL 中的 hash,没有返回空字符串 | 
Location 对象的方法
- assign(url):加载新的文档,- window.location.assign("csdn.com");
- replace(url):替换当前文档,- window.location.replace("csdn.com");
- reload():重新加载当前文档,- window.location.reload();
navigator 对象
navigator 对象提供了有关浏览器的信息。
navigator 对象属性
- navigator.userAgent:可以用来检查浏览器类型,手机号类型。
- navigator.language:获取浏览器语言,然后设置网站的语言,提升用户体验。
- navigator.onLine:检查用户当前是否处于联网状态。
- navigator.geolocation:获取地理位置信息
function getMobileModel() {var userAgent = navigator.userAgent || navigator.vendor || window.opera;var mobileModel = "未知手机型号";if (/iPhone/i.test(userAgent)) {} else if (/Android/i.test(userAgent)) {mobileModel = "Android设备";}return mobileModel;
}console.log(getMobileModel());
screen 对象
Screen 对象是浏览器的一个组成部分,用于提供有关用户屏幕的详细信息,如屏幕尺寸、颜色深度、分辨率等。这些信息可以帮助开发者获取有关用户环境的上下文,以优化布局和响应式设计。
screen 对象属性
- screen.width:返回屏幕的宽度(单位:像素),包括任务栏或浏览器边框等。
- screen.height:返回屏幕的高度(单位:像素),包括任务栏或浏览器边框等。
- screen.availWidth:返回屏幕可用宽度,即除去任务栏或浏览器边框等后的宽度(单位:像素)。这个属性对于确定网页内容的最佳布局宽度非常有用。
- screen.availHeight:返回屏幕可用高度,即除去任务栏或浏览器边框等后的高度(单位:像素)。这个属性可以帮助开发者确保网页内容在用户的屏幕上可见。
- screen.colorDepth:返回显示屏幕的颜色分辨率(像素:比特)。这个属性可以帮助开发者了解用户设备的颜色显示能力,从而选择适当的图像和颜色方案。
- screen.pixelDepth:返回目标设备或缓冲器上的调色板的比特深度,通常与 screen.colorDepth 相同。
- screen.deviceXDPI和- screen.deviceYDPI:分别返回显示屏幕的每英寸水平点数和每英寸垂直点数。这些属性对于了解用户设备的屏幕密度和物理尺寸非常有用。
screen 使用场景
- 响应式设计
- 设备适配和用户体验优化
// 使用 Screen 对象实现响应式设计
function adjustLayout() {if (screen.availWidth < 768) {document.body.style.backgroundColor = "lightblue";} else {document.body.style.backgroundColor = "white";}
}// 监听页面加载和窗口大小变化
window.onload = adjustLayout;
window.onresize = adjustLayout;if (screen.colorDepth > 24) {// 使用更高质量的图像
} else {// 使用低质量或优化过的图像
}
history 对象
history 对象保存着用户上网的历史记录,从窗口打开的那一刻算起。处于安全考虑,开发人员无法得知用户浏览过的 URL。
history 对象属性
- history.length:返返回历史记录中条目的数量,包括当前页面。即用户访问的总页面数。
- history.scrollRestoration:滚动恢复属性允许 web 应用程序在历史导航上显式地设置默认滚动恢复行为
- history.state:返回当前页面的 state 对象。这个属性在 HTML5 中引入,用于存储与当前历史记录条目相关联的状态对象。
history 主要方法
- back():会在会话历史记录中向后移动一页。如果没有上一页,则此方法调用不执行任何操作。
- forward():会话历史中向前移动一页。
- go(delta):从会话历史记录中加载特定页面。你可以使用它在历史记录中前后移动,具体取决于 delta 参数的值。
- pushState():向浏览器的会话历史栈增加了一个条目。
- replaceState():用于更新会话历史栈条目。与 pushState()类似,但它不会新建一个,而是替换当前的。
history 使用场景
- 导航控制
- 状态管理
- 单页应用(SPA):Vue-router 的 history 模式
history.go(-1) //-1,1,2
history.back()
history.forward()
if(history.length==0){//用户打开的第一个页面
}history.pushState({ key: 'value' }, '', '/new-url');
总结
BOM 提供了与浏览器交互的基础设施,允许开发者获取当前窗口、文档、历史、导航和屏幕的信息及功能。这些功能使得我们能够创建丰富的用户体验和交互。
相关文章:
JavaScript 浏览器对象模型 BOM
浏览器对象模型(Browser Object Model,BOM)是指一组与浏览器进行交互的 JavaScript 对象。它允许 JavaScript 与浏览器的组件进行交互,比如窗口、文档、历史记录等。BOM 不同于 DOM(文档对象模型)ÿ…...
 
基于MATLAB的激光雷达与相机联合标定原理及实现方法——以标定板为例
1.为什么要进行激光雷达和相机的联合标定? 激光雷达和相机的联合标定是为了将两种传感器的数据统一到同一坐标系中,从而实现更准确的环境感知。激光雷达提供精准的三维距离信息,而相机捕捉丰富的纹理和颜色,通过联合标定可以结合两…...
 
React(一)
文章目录 项目地址一、创建第一个react项目二、JSX语法2.1 生成列表2.2 大括号识别JS的表达式2.3 列表循环array2.4 条件判断以及假值显示2.5 复杂条件渲染2.6 事件处理2.7 添加CSS样式2.8 添加图片2.9 使用Fregments返回多个根标签2.10多条件渲染2.11 导出子组件2.12 给子组件…...
 
Liunx-Ubuntu22.04.1系统下配置Anaconda+pycharm+pytorch-gpu环境配置
这里写自定义目录标题 Liunx-Ubuntu22.04.1系统下配置Anacondapycharmpytorch-gpu环境配置一、Anaconda3配置1.Anaconda安装2.Anaconda更新3.Anaconda删除 二、pycharm配置1.pycharm安装 三、pytorch配置 Liunx-Ubuntu22.04.1系统下配置Anacondapycharmpytorch-gpu环境配置 一…...
 
Postman之数据提取
Postman之数据提取 1. 提取请求头\request中的数据2. 提取响应消息\response中的数据3. 通过正在表达式提取4. 提取cookies数据 本文主要讲解利用pm对象对数据进行提取操作,虽然postman工具的页面上也提供了一部分的例子,但是实际使用时不是很全面&#…...
 
selenium元素定位校验以及遇到的元素操作问题记录
页面元素定位方法及校验 使用比较多的是通过id、class和xpath来对元素进行定位。在定位前可以现在浏览器验证是否可以找到指定的元素。这样就不用每添加一个元素定位都运行代码来检查定位方式表达式是否正确。 使用XPATH定位 在浏览器F12,找到元素,在元…...
 
在AndroidStudio中新建项目时遇到的Gradle下载慢问题,配置错的按我的来,镜像地址不知道哪个网页找的,最主要下载要快
android-studio-2024.2.1.11-windows Android 移动应用开发者工具 – Android 开发者 | Android Developers https://r4---sn-j5o76n7z.gvt1-cn.com/edgedl/android/studio/install/2024.2.1.11/android-studio-2024.2.1.11-windows.exe?cms_redirectyes&met1731775…...
用mv命令替换rm命令
# 用mv命令替换rm命令 主要内容来源自以上博文 rm命令穷凶极恶,以下为替换命令的方式,必做 步骤 修改vim ~/.bashrc加入以下代码 mkdir -p ~/.trash #在家目录下创建一个.trash文件夹(隐藏文件,ls -a 查看) alias rmdel #使用别名…...
电解车间铜业机器人剥片技术是现代铜冶炼过程中自动化和智能化的重要体现
电解车间铜业机器人剥片技术是现代铜冶炼过程中自动化和智能化的重要体现 电解车间铜业机器人剥片技术是现代铜冶炼过程中自动化和智能化的重要体现,它主要应用于铜电解精炼的最后阶段,即从阴极板上剥离出纯铜的过程。以下是该技术的几个关键点ÿ…...
 
【qt】控件2
1.frameGeometry和Geometry区别 frameGeometry是开始从红圈开始算,Geometry从黑圈算 程序证明:使用一个按键,当按键按下,qdebug打印各自左上角的坐标(相当于屏幕左上角),以及窗口大小 Widget::Widget(QWid…...
 
Frida反调试对抗系列(四)百度加固
本文只是交流技术,如有侵权请联系我删除。 知识星球:https://t.zsxq.com/kNlj4 前言: 上一篇文章我们提到 我们使用github开源魔改好的frida server 但是仍然有一些厂商的server不能通过,那么这篇文章针对百度加固 进行快速通…...
Redis 安全
Redis 安全 Redis是一个开源的,高性能的键值存储系统,它通常被用作数据库,缓存和消息代理。由于其高性能和简单的API,Redis在全球范围内被广泛使用。然而,与其他数据库系统一样,Redis的安全性也是至关重要…...
 
上交大与上海人工智能研究所联合推出医学多语言模型,模型数据代码开源
今天为大家介绍的是来自上海交通大学的王延峰与谢伟迪团队的一篇论文。开源的多语言医学语言模型的发展可以惠及来自不同地区、语言多样化的广泛受众。 来源丨 DrugAI、 机器人的脑电波 论文:https://www.nature.com/articles/s41467-024-52417-z MMedC࿱…...
 
网络安全:我们的安全防线
在数字化时代,网络安全已成为国家安全、经济发展和社会稳定的重要组成部分。网络安全不仅仅是技术问题,更是一个涉及政治、经济、文化、社会等多个层面的综合性问题。从宏观到微观,网络安全的重要性不言而喻。 宏观层面:国家安全与…...
理解 Python 中的 __getitem__ 方法:在自定义类中启用索引和切片操作
理解 Python 中的 __getitem__ 方法:在自定义类中启用索引和切片操作 在Python中,__getitem__是一个特殊方法,属于数据模型方法之一,它使得Python对象能够支持下标访问和切片操作。这个方法提供了一种机制,允许类的实…...
 
【数据结构】【线性表】【练习】反转链表
申明 该题源自力扣题库19,文章内容(代码,图表等)均原创,侵删! 题目 给你单链表的头指针head以及两个整数left和right,其中left<right,请你反转从位置left到right的链表节点&…...
 
vue2+3 —— Day5/6
自定义指令 自定义指令 需求:当页面加载时,让元素获取焦点(一进页面,输入框就获取焦点) 常规操作:操作dom “dom元素.focus()” 获取dom元素还要用ref 和 $refs <input ref"inp" type&quo…...
汽车资讯新视角:Spring Boot技术革新
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
 
关于win11电脑连接wifi的同时,开启热点供其它设备连接
背景: 我想要捕获手机流量,需要让手机连接上电脑的热点。那么问题来了,我是笔记本电脑,只能连接wifi上网,此时我的笔记本电脑还能开启热点供手机连接吗?可以。 上述内容,涉及到3台设备&#x…...
 
【Apache Paimon】-- 2 -- 核心特性 (0.9.0)
目录 1、实时更新 1.1、实时大批量更新 1.2、支持定义合并引擎 1.3、支持定义更新日志生成器 2、海量数据追加处理 2.1、append table 2.2、快速查询 3、数据湖功能(类比:hudi、iceberg、delta) 3.1、支持 ACID 事务 3.2、支持 Time…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
 
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
 
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
 
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
 
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
 
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
 
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
 
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
