JavaScript BOM 核心 API 详解:窗口、导航与定时器
本文系统讲解 JavaScript 浏览器对象模型(BOM)的核心 API。涵盖窗口对话框(alert、confirm、prompt)、窗口管理(open、close、opener)、页面导航(history、location、navigator)以及定时任务(setTimeout、setInterval)的使用方法。通过具体代码示例,展示如何省略 window 前缀及处理父子窗口通信,帮助开发者掌握浏览器环境下的基础交互与控制逻辑。
BOM 概述与 window 前缀省略
BOM(Browser Object Model,浏览器对象模型)是 JavaScript 中用于与浏览器窗口交互的核心机制。
在调用 window 对象的属性和方法时,可以省略前缀“window.”,直接使用方法名。
主要包含以下功能模块:
窗口对话框与页面控制
窗口对话框与页面控制
1. 警告框:使用 alert() 方法弹出提示消息。
window.alert("msg");
2. 确认框:使用 confirm() 方法获取用户确认操作。
window.confirm("msg");
3. 询问框:使用 prompt() 方法获取用户输入文本。
window.prompt("msg","defaulvalue")
页面窗口管理与父子通信
页面窗口管理
1. 打开新窗口:使用 open() 方法创建新浏览器窗口或标签页。
window.open()
2. 父窗口引用:在子窗口中,通过 window.opener 属性获取父窗口的 window 对象,从而调用父窗口的方法或访问其属性。
window.opener
window.opener.fatherSayHello(); 调用父窗口的方法
window.opener.a
3. 关闭窗口:使用 close() 方法关闭当前窗口或父窗口。
window.close()
window.close(); 关闭当前
window.opener.close(); 关闭父窗口
定时任务与屏幕信息
定时任务控制
1. 单次定时任务:使用 setTimeout() 方法在指定毫秒数后执行一次回调函数。
var taskid = window.setTimeout(function,ms);
window.setTimeout("alert('hello!')", 5000);
2. 间隔执行任务:使用 setInterval() 方法每隔指定毫秒数重复执行回调函数。
var taskid = window.setInteval(function,ms);
3. 清除单次定时任务:使用 clearTimeout() 方法取消由 setTimeout() 设置的定时器。
window.clearTimeout(taskid);
4. 清除间隔执行任务:使用 clearInterval() 方法取消由 setInterval() 设置的定时器。
window.clearInteval(taskid);
浏览器导航与历史记录
屏幕信息:通过 screen 对象获取屏幕分辨率(width 和 height)。
//长*宽
console.log(screen.width + "*" + screen.height)
后退:使用 history.back() 方法使页面后退一页。
window.history.back();
前进:使用 history.forward() 方法使页面前进一页。
window.history.forward();
刷新:使用 location.reload() 方法或重新赋值 location.href 来刷新当前页面。
window.location.reload();//刷新
window.location.href = window.location.href;//刷新
导航控制:使用 history.go(x) 方法,其中 x 为正数表示前进 x 步,负数表示后退 x 步,0 表示刷新当前页面。
window.history.go(x)
链接跳转:通过修改 location.href 属性实现页面跳转。
window.location.href = http://www.baidu.com;
用户代理:通过 navigator.userAgent 属性获取浏览器内核及版本信息。
console.log(window.navigator.userAgent)
窗口对话框与页面控制
//凡是window的属性和方法,均可以省略“window.”
<script type="application/javascript">
// 警告框
function testAlert(){
var result=window.alert("这是一个警告框")
console.log(result);
}
// confirm 确认框
function testConfirm(){
var result =window.confirm("你确认要离开了吗?");
if(result){
alert("欢迎下次再来!")
}else{
alert("那你在逛逛吧!")
}
consol.log(result);
}
// prompt 询问框
function testPrompt(){
var result = window.prompt("请输入U盾密码","例如:123456");
console.log(result);
}
</script>
<body>
<button onclick="testAlert();">testAlert</button>
<button onclick="testConfirm();">testConfirm</button>
<button onclick="testPrompt();">testPrompt</button>
</body>
页面窗口管理
//子页面
<script type="application/javascript">
function sayHello(){
alert("hello world")
}
//打开一个窗口
function callFatherMethod(){
window.opener.fatherSayHello();
window.opener.a
}
//关闭本窗口
function testClose(){
window.close();
}
//关闭父窗口
function testFatherClose(){
window.opener.close();
}
</script>
<body>
<button onclick="callFatherMethod()">调用父窗口的方法</button>
<button onclick="testClose()">关闭本窗口</button>
<button onclick="testFatherClose()">关闭父窗口</button>
</body>
//父页面
<script type="application/javascript">
var a = 10;
window.onload = function(){
console.log(window);
console.log("11111111111")
}
//打开一个新窗口
function testOpen(){
var sonwindow = window.open("son.html","aaa","height=300,width=500,top=50,left=50,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no")
//子窗口的window对象
console.log(sonwindow);
}
function fatherSayHello(){
alert("hello son!");
}
</script>
<body>
<button onclick="testOpen();">打开一个新窗口</button>
</body>
定时任务控制
<script type="application/javascript">
function setTime() {
// window.setTimeout("alert('hello!')",5000);
window.setTimeout(sayHello, 5000);
}
var sayHello = function () {
alert("你好!");
}
</script>
</head>
<body>
<button onclick="sayHello();">调用sayHello</button>
<button onclick="setTime();">调用setTime</button>
间隔执行任务
<script type="application/javascript">
/*
window.onload = function(){
window.setTimeout(closeSelf, 1000);
}
function closeSelf() {
var secval = document.getElementById("sec").innerHTML;
var secint = parseInt(secval);
document.getElementById("sec").innerHTML = --secint;
if(secint == 0){
window.close();
}
window.setTimeout(closeSelf, 1000);
}
*/
var taskid = 0;
window.onload = function(){
//间隔执行任务,间隔 1000ms 执行一次
taskid = window.setInterval(closeSelf, 1000);
}
function closeSelf() {
//获取 10s
var secval = document.getElementById("sec").innerHTML;
console.log(secval);
var secint = parseInt(secval);
console.log(secint);
//10s 减减
document.getElementById("sec").innerHTML = --secint;
if(secint == 0){
window.close();
}
}
// 4.清除间隔执行任务 暂停
function stopTask(){
window.clearInterval(taskid);
}
//继续计时
function goonTask(){
taskid = window.setInterval(closeSelf, 1000);
console.log(taskid)
}
</script>
<body>
付款成功,页面将在<span id="sec">10</span>s后关闭。
<button onclick="stopTask()">稍等,待会我会自己关闭</button>
<button onclick="goonTask()">继续读秒,关闭窗口</button>
</body>
以上内容涵盖了 BOM 的主要操作,希望能为学习 JavaScript 浏览器对象模型提供实际帮助。
AOS.js 动画不触发怎么办?排查 DOM 加载与移动端兼容问题
2026-11-05 17:02:26
sigma.js 怎么实现节点点击、拖拽与悬停提示交互
2026-11-05 15:03:27
Matter.js 与 PixiJS/Three.js 集成:分离物理计算与渲染
2026-11-05 13:43:48
主流JS弹幕库选型指南:Danmaku.js等库的功能与体积对比
2026-11-05 09:28:19
JavaScript点击事件监听与交互效果实例
2026-11-05 09:10:19
