《十》JavaScript 中的 BOM

本文深入解析了浏览器对象模型(BOM)的概念及其核心组成部分window对象的详细信息,包括其属性、方法和如何通过window对象操作浏览器窗口,如调整大小、位置、打开和关闭窗口,以及使用定时操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BOM:Browser Object Model、浏览器对象模型。BOM 提供了独立于内容而与浏览器窗口进行交互的对象,用来访问和操作浏览器窗口。

window 对象:

window 对象表示浏览器中打开的窗口。是 JS 里面最大的最外围的对象,所有 JavaScript 全局对象、函数、一级变量均自动成为 window 对象的成员。

属性:

  1. name:窗口名称。
  2. document:浏览器中加载的页面的文档对象。
  3. location、history、screen、navigator 等。

在应用有 frameset 或者 iframe 的页面,window.self 是对当前窗口自身的引用,window.top 返回顶层窗口,window.parent 返回父窗口。

方法:

window 对象对应着 Web 浏览器的窗口,使用它可以直接对浏览器窗口进行操作。window 对象提供的主要功能分为以下几类:

  1. 系统对话框:

    • alert(str):消息对话框,显示 str字符串的内容。
    • confirm(str):确认对话框,显示 str 字符串内容,按确定按钮返回 true,其他操作返回 false。
    • prompt(str, value):输入对话框,采用文本框输入信息。str 为提示信息,value 为初始值。
  2. 打开、关闭新窗口:

    • open(url, name, config):打开窗口。url 要打开的新页面的链接;name 窗口的名称;config 窗口的配置参数 。

      //page.html 将在新窗口 newWindow 中打开,宽为100,高为400,距屏顶0象素,屏左0象素,无工具条,无菜单条,无滚动条,不可调整大小,无地址栏,无状态栏。
      window.open ('page.html','newWindow','height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no') 
      
    • close():关闭窗口。

      window.close() 在 Firefox 不能使用,是因为 Firefox 默认不能关闭用户打开的网页。
      解决方案:

      1. 利用 JS 中的 window.open():火狐必须是 JS 打开的页面,才能用 window.close()关 闭。所以可以 window.open(“页面地址”)跳转到当前页面。
      2. 利用 a 标签:在火狐中,在父窗口打开的页面用 window.close() 不能关闭。所以利用 a 标签跳转到这个页面需要 target=”_blank”
  3. 调整窗口的大小和位置等:

    • focus()blur():窗口获得焦点、失去焦点。
    • moveBy()moveTo():移动窗口。
    • resizeBy()resizeTo():调整窗口大小。
    • scrollBy()scrollTo():滚动窗口中网页的内容。
  4. 定时操作:多用于网页动态时钟,制作倒计时,跑马灯效果等。

    • setInterval(exp,time):周期性触发代码,以一定的时间间隔重复执行代码,循环往复。exp 执行语句。 time 时间周期,单位为毫秒。
      setInterval(alert(‘hello’),3000);
      
    • clearInterval(tID):停止启动的定时器。
      var timer=setInterval(alert("Hello"), 3000);
      
      clearInterval(timer);
      
    • setTimeout(exp,time):一次性触发代码,在一个设定的时间间隔之后执行代码。
    • clearTimeout(tID):停止启动的计时器。
setTimeout()setInterval() 的区别:

计时器的计时是独立运行的,不受 JS 线程的影响。

  1. 触发时间和执行次数不同: setTimeout() 会在指定的时间间隔之后执行一次回调函数;setInterval() 每隔指定的时间间隔执行一次回调函数。
  2. setTimeout()setInterval()中的第二个参数,指定的不是回调函数的执行时间,而是回调函数被加入到任务队列的时间,因此二者都会存在时间误差问题。
    setInterval() 的回调函数会按照指定的时间间隔被依次加入到任务队列中,如果前一个回调函数执行时间过长或者主线程被其他任务阻塞,就会导致多个回调函数在队列中堆积,后续它们的执行时间会越来越不准确;可以使用递归使用 setTimeout() 来减小,但也只能减小误差,因为指定的时间时间是它们被放到任务队列的时间,而不是实际执行回调函数的时间。
使用 setTimeout() 实现 setInterval()
// 递归实现 setInterval
setTimeout(function(){
  const executeStartTime = new Date().getTime();
  console.log('setTimeout:' + new Date().toLocaleString());
  const time = new Date().getTime() - executeStartTime;

  setTimeout(arguments.callee, 1000 - time);
}, 1000);
使用 setInterval() 实现 setTimeout()
const timer = setInterval(() => {
  console.log('setInterval:' + new Date().toLocaleString());
  clearInterval(timer);
}, 1000);

location 对象:

location 对象包含了浏览器当前的 URL 地址信息。

属性:

http://127.0.0.1:8020/program/index.html?articleId=848403
  1. href:获取或设置整个 url。http://127.0.0.1:8020/program/index.html?articleId=848403

  2. protocol:获取或设置 url 的协议。http

  3. host:获取或设置 url 的主机名。127.0.0.1:8020

  4. port:获取或设置 url 的端口号。8020

  5. pathname:获取或设置文件的路径。/program/index.html

  6. hash:获取或设置 url 的 # 号及 # 号后面的参数(页面的标签值)。

    # 代表页面中的一个位置,其右边的字符,就是该位置的标识符。浏览器读取 url 后,会自动将这个位置滚动至可视区域。
    单单改变 # 后面的内容,浏览器只会滚动到相应位置,不会重新加载网页。
    每一次改变 # 后面的内容,都会在浏览器的访问历史中增加一个记录,使用后退按钮,就可以回到上一个位置。
    # 是用来指导浏览器动作的,对服务器完全无用,所以 HTTP 请求中并不包含 #。只有将 # 转码为 %23,浏览器才会将其作为实义字符处理。

  7. search:获取或设置 url 的 ? 号及 ? 号后面的参数。?articleId=848403

方法:

  1. replace(url):替换为 url 网页地址。
  2. relode():重新载入当前网址,同时按下刷新按钮。

JS 刷新当前页面:

  1. location.reload(); 。
  2. <head>中加入<meta http-equiv="refresh" content="5">,每隔 5 秒自动刷新一次页面。

history 对象:

history 对象包含了浏览器访问的网页的历史信息。

属性:

  1. length:浏览器历史记录的总数。

方法:

  1. back():等同于单击后退按钮。因为是从浏览器缓存中拿到的页面,所以不会进行页面刷新。
  2. forward():等同于单击前进按钮。
  3. go(num):num 为正,等同于单击几次前进按钮;num 为负,等同于单击几次按钮。

navigator 对象:

navigator 对象包含了浏览器本身的信息。

属性:

  1. appName:浏览器名称。
  2. appCodeName:浏览器代码名称。
  3. appVersion:浏览器运行平台和版本。
  4. userAgent:返回当前浏览器的用户代理字符串。

    基于用户代理字符串来识别浏览器是不可靠的且不推荐,因为此属性的值在同一浏览器的不同版本中可能是不同的,且用户代理字符串是可以由用户配置的。

screen 对象:

screen 对象包含了客户端屏幕及渲染能力的信息。

属性:

  1. width、height。
  2. availWidth、availHeight:窗口可以使用的宽度和高度。
  3. colorDepth:屏幕的色彩深度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值