【Java 进阶篇】JavaScript BOM(浏览器对象模型)详解

news2025/7/19 3:58:33

在这里插入图片描述

BOM,即浏览器对象模型(Browser Object Model),是JavaScript与浏览器之间的接口,它允许JavaScript与浏览器进行交互,实现访问和控制浏览器窗口、文档和其他浏览器功能的功能。本文将详细介绍BOM的各个方面,包括窗口对象、定时器、历史记录、位置信息等,并提供示例代码来帮助您更好地理解和运用BOM。

1. 窗口对象

窗口对象是BOM的核心,它代表浏览器中打开的窗口或选项卡。通过窗口对象,您可以执行各种操作,例如控制窗口的大小、位置、导航等。

1.1 窗口大小

通过window对象,您可以获取和设置浏览器窗口的大小。下面是一些常见的窗口大小操作:

  • 获取窗口的宽度和高度:
const windowWidth = window.innerWidth;  // 获取窗口宽度
const windowHeight = window.innerHeight;  // 获取窗口高度
  • 调整窗口大小:
window.resizeTo(800, 600);  // 将窗口大小设置为宽800像素,高600像素

1.2 窗口位置

通过window对象,您可以获取和设置浏览器窗口在屏幕上的位置。以下是一些窗口位置的操作:

  • 获取窗口左上角相对于屏幕的坐标:
const windowX = window.screenX;  // 获取窗口左上角的X坐标
const windowY = window.screenY;  // 获取窗口左上角的Y坐标
  • 移动窗口到指定位置:
window.moveTo(100, 100);  // 将窗口移动到屏幕上坐标(100, 100)的位置

1.3 窗口导航

窗口对象还提供了导航功能,可以用于在浏览器中加载不同的URL。

  • 加载新页面:
window.location.href = 'https://www.example.com';  // 加载新的URL
  • 刷新页面:
window.location.reload();  // 刷新当前页面
  • 后退和前进:
window.history.back();  // 后退到上一个页面
window.history.forward();  // 前进到下一个页面

1.4 弹出对话框

窗口对象允许您在浏览器中弹出对话框,包括警告框、确认框和提示框。

  • 警告框:
window.alert('这是一个警告框');  // 弹出警告框
  • 确认框:
const result = window.confirm('你确定要执行这个操作吗?');  // 弹出确认框
  • 提示框:
const userInput = window.prompt('请输入您的姓名:', '默认值');  // 弹出提示框

2. 定时器

BOM还提供了定时器功能,允许您在指定的时间间隔后执行代码。JavaScript中有两种类型的定时器:setTimeoutsetInterval

2.1 setTimeout

setTimeout函数用于在指定的延迟时间后执行一次代码。

setTimeout(function() {
    // 在延迟时间后执行的代码
}, 1000);  // 1000毫秒(1秒)后执行

2.2 setInterval

setInterval函数用于按照指定的时间间隔重复执行代码。

setInterval(function() {
    // 每隔一段时间执行的代码
}, 2000);  // 每隔2000毫秒(2秒)执行一次

定时器常用于制作动画、定时刷新数据以及执行周期性任务。

3. 历史记录

BOM允许您访问和操作浏览器的历史记录。history对象包含与浏览历史相关的属性和方法。

3.1 后退和前进

使用history对象,您可以后退或前进到浏览历史中的不同页面。

history.back();  // 后退到上一个页面
history.forward();  // 前进到下一个页面

3.2 历史记录长度

您可以使用length属性来获取历史记录的长度,即浏览历史中的页面数量。

const historyLength = history.length;

3.3 手动添加历史记录

通过pushState方法,您可以手动向浏览器的历史记录中添加新的页面状态。

history.pushState({ page: 'page1' }, 'Page 1', '/page1.html');

上述代码会将新的页面状态添加到历史记录中,使浏览器地址栏显示为/page1.html

4. 位置信息

BOM还提供了位置信息相关的功能,包括获取用户的地理位置信息。

4.1 获取地理位置

使用navigator对象的geolocation属性,您可以获取用户的地理位置信息。

if ("geolocation" in navigator) {
    navigator.geolocation.getCurrentPosition(function(position) {
        const latitude = position.coords.latitude;
        const longitude = position.coords.longitude;
        console.log(`您的纬度是:${latitude},经度是:${longitude}`);
    });
}

这段代码会获取用户的地理位置,并显示纬度和经度信息。

4.2 监听位置变化

您还可以使用watchPosition方法来持续监听用户的位置变化。

const watchId = navigator.geolocation.watchPosition(function(position) {
    const latitude = position.coords.latitude;
    const longitude = position.coords.longitude;
    console.log(`您的位置已更新,新的纬度是:${latitude},经度是:${longitude}`);
});

5. 弹出窗口

BOM允许您使用window.open方法在浏览器中打开新的弹出窗口。

const newWindow = window.open('https://www.example.com', '新窗口', 'width=400,height=300');

上述代码会在浏览器中打开一个新窗口,显示https://www.example.com页面,窗口大小为宽400像素、高300像素。

6. 屏幕信息

screen对象包含有关用户屏幕的信息,如屏幕宽度、高度、颜色深度等。

const screenWidth = window.screen.width;
const screenHeight = window.screen.height;
const colorDepth = window.screen.colorDepth;
console.log(`屏幕宽度:${screenWidth}px,屏幕高度:${screenHeight}px,颜色深度:${colorDepth}`);

7. Cookie

通过document.cookie,您可以读取和写入浏览器的Cookie。Cookie是一种存储在用户计算机上的小型文本文件,用于在多次访问之间存储和检索数据。

7.1 读取Cookie

const cookieValue = document.cookie;

7.2 写入Cookie

document.cookie = 'username=John; expires=Fri, 31 Dec 2022 23:59:59 GMT; path=/';

8. 总结

BOM是JavaScript中与浏览器交互的重要部分,它允许您控制窗口大小、位置、导航,使用定时器执行代码,管理历史记录,获取位置信息,打开弹出窗口,访问屏幕信息,以及读取和写入Cookie。这些功能为开发者提供了丰富的工具来创建交互性强、用户友好的Web应用程序。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1102781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

做web自动化测试遇到Chrome浏览器老是自动更新,怎么办 ? 这里提供两个解决办法 。

web自动化安装驱动安装 进行web自动化时 ,需要提前安装浏览器的驱动 ,尤其是chrome浏览器 。它的更新速度很快 ,是不是更新了新版本 。这就导致我们的驱动也要跟着变化。 1.停止自动更新 那么 ,如何关闭chrome浏览器的自动更新…

对称(镜像)二叉树

之前写的比较两棵树是否相等,是左子树和左子树比,右子树和右子树比——利用这个思想镜像二叉树就是从第二层的两个节点作为两棵树的根,然后比较,这里的比较是左子树和右子树比,右子树和左子树比 ——也就是利用比较两个…

CS鱼饵制作

文章目录 宏病毒(宏钓鱼)快捷方式钓鱼shellQMaker bug伪装pdf文件上线 宏病毒(宏钓鱼) 启动teamsever服务器,具体过程请参考我之前的文章: 在主机中启动CS客户端,111是真实机的用户&#xff1a…

电压参考芯片 LM285D-1.2 备忘

LM285D-1.2 是一款参考电压芯片,本次备忘使用的数据手册是安美森家的。 LM285D 中的 D 指的是 SOIC-8 封装,是贴片的; 而 LM285Z 中的 Z 指的是 TO-92 封装,是直插的。购买时需要注意,防止买错封装。 注:以下参数中&…

Vue之Vue的介绍安装开发实例生命周期钩子

博主心得: keyup必须与change一起使用v-on.click可以直接写成clickclick“setVal”里的setVal换成数字之后有惊喜VS Code是真的狗,一些报错根本不会直接显示总结:VS code太狗了 1.vue介绍 1.1 什么是vue vue是一个构建用户界面UI的渐进式jav…

LLM-RAG-WEB 大模型+文件+可视化界面

注意:这里只是简单实现了功能和界面,文件对话也暂时只支持一个文件,如果跳到模型对话再切换回文件对话会文件会删除重置会话,但模型对话切换回来时保留之前会话的。 1、代码(使用步骤说明在链接里) 参考下…

transformer_01

一、传统RNN存在的问题 1.序列前序太长,每个xi要记住前面的特征,而且一直在学,没有忘记,可能特征不能学的太好 2.串行,层越多越慢,难以堆叠很多层; 3.只能看到过去,不能看到未来 搞…

二维码智慧门牌管理系统:高效标准化处理地址数据

文章目录 前言一、标准化数据的重要性二、标准检查与自动化处理三、人工修复与高效性四、数据应用与效益 前言 随着科技的快速发展,数据管理在现代社会中扮演着越来越重要的角色。为了提升数据质量,标准化检查成为必不可少的环节。今天,我们…

Cobalt Strike

文章目录 Cobalt Strike1. Cobalt Strike 简介2. Cobalt Strike 和 MSF 的区别3. Cobalt Strike server4. Cobalt Strike client4.1 安装插件4.2 运行木马4.3 参数详情 5. Cobalt Strike 鱼饵制作5.1 宏5.2 Power shell5.3 快捷方式5.4 ShellQMaker 免杀5.5 伪装pdf文件 Cobalt…

基于龙格-库塔优化的BP神经网络(分类应用) - 附代码

基于龙格-库塔优化的BP神经网络(分类应用) - 附代码 文章目录 基于龙格-库塔优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.龙格-库塔优化BP神经网络3.1 BP神经网络参数设置3.2 龙格-库塔算法应用 4.测试…

【JVM系列】- 类加载子系统与加载过程

类加载子系统与加载过程 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正…

【Linux】文件IO基础知识——上篇

目录 前文 一, 系统级——文件操作接口 a. open b. close c. write d. read 二,接口理解 那文件描述符——fd是什么呢? 三,文件描述符分配规则 原理 四,重定向——dup2 简易shell——重定向 五&#xff0c…

laravel中锁以及事务的简单使用

一、首先来说一下什么是共享锁?什么是排他锁? 共享:我可以读 写 加锁 , 别人可以 读 加锁。 排他:只有我 才 可以 读 写 加锁 , 也就是说,必须要等我提交事务,其他的才可以操作。 二、简单例子实现加锁 锁…

基于C8051F380的流水灯设计

一、C8051F380简介: C8051F380-GQ 是Silicon Labs的一款高度集成的汽车和工业微控制器 MCU。C8051F380的CPU内核为8051,内核规格: 8 位 , 速度: 48 MIPS ; CPU最大主频:192MHz ;工作电压范围:2.7V~5.25V &a…

用shell批量修改文件名

场景一 给这些文件都加上.png后缀 #!/bin/bash for i in *; do mv "$i" "$i.png"; done 场景二 给某些文件按某种规则重命名,如按照1,2,3,4…命名,保留原格式 注: Shell中实现整数自增的几种方法示例,此处用于声明是数字类型的declare -i必须添加,否则…

MyBatisPlue-03

一 映射匹配兼容机制 1.映射数据库的字段名 问题描述: 当数据库表字段和实体类的属性名称出现不匹配时: 解决: 知识点: 2.忽略实体类的部分字段 问题描述: 当要表示如 显示用户是否在线等消息,&#xf…

物联网AI MicroPython传感器学习 之 ADXL345 3轴加速度传感器

学物联网,来万物简单IoT物联网!! 一、产品简介 ADXL345是一款完整的3轴加速度测量系统,可选择的测量范围有士2g,士4g,士8g或士16g。它既能测量运动或冲击导致的动态加速度,也能测量静止加速度&…

C++对象模型(13)-- 构造函数语义学:析构函数

1、默认析构函数生成规则 跟构造函数一样,编译器不一定会为类生成默认析构函数。生成默认析构函数的规则有下面2条: (1)包含一个类类型的成员变量,且成员变量所属的类有默认析构函数。 (2)其…

机器学习笔记 - 3D 对象跟踪极简概述

一、简述 大多数对象跟踪应用程序都是 2D 的。但现实世界是 3D 的,无论您是跟踪汽车、人、直升机、导弹,还是进行增强现实,您都需要使用 3D。在 CVPR 2022(计算机视觉和模式识别)会议上,已经出现了大量3D目标检测论文。 二、什么是 3D 对象跟踪? 对象跟踪是指随着时间的…